软件设计——简单工厂模式之女娲造人
一、简单工厂模式含义
简单工厂模式又叫静态方法模式(因为工厂类定义了一个静态方法)
现实生活中,工厂是负责生产产品的;同样在设计模式中,简单工厂模式我们可以理解为负责生产对象的一个类,称为“工厂类”
二、解决的问题
将“类实例化的操作”与“使用对象的操作”分开,让使用者不用知道具体参数就可以实例化出所需要的“产品”类,从而避免了在客户端代码中显式指定,实现了解耦。
即使用者可直接消费产品而不需要知道其生产的细节
三、模式原理
3.1 模式组成

3.2 UML类图

3.3 使用步骤
- 
创建抽象产品类 & 定义具体产品的公共接口; 
- 
创建具体产品类(继承抽象产品类) & 定义生产的具体产品; 
- 
创建工厂类,通过创建静态方法根据传入不同参数从而创建不同具体产品类的实例; 
- 
外界通过调用工厂类的静态方法,传入不同参数从而创建不同具体产品类的实例 
四、具体实例
[实验任务一]:女娲造人
实验要求:使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,如果传入参数R,则返回一个Robot对象。请用程序设计实现上述场景。
4.1 UML类图

接口和类的区别:
从定义上看,接口是个集合,并不是类。 类描述了属性和方法,而接口只包含方法(未实现的方法)。 接口和抽象类一样不能被实例化,因为不是类。 但是接口可以被实现(使用implements 关键字)。
4.2 代码
Person . java
package test2;
public interface Person {
	
	public void make();
	
}
创建接口:File ---------> new --------> interface
Man . java
package test2;
public class Man implements Person{
	
	public Man() {
		
    }
    public void make(){
    	
        System.out.print("生产男人");
        
    }
}
Woman . java
package test2;
public class Woman implements Person{
	
	public Woman() {
	}
	
	public void make() {
		
		System.out.print("生产女人");
		
	}
}
Robot . java
package test2;
public class Robot implements Person{
	
	public Robot() {
    }
	
    public void make(){
    	
        System.out.print("生产机器人");
        
    }
}
Nvwa . java
package test2;
public class Nvwa {
	public Nvwa() {
	
	}
	public static  Person Personjudge(String arg ) {
        //判断参数,再选择调用哪个类
        if(arg.equalsIgnoreCase("M"))
        {
            return new Man();
        }else if(arg.equalsIgnoreCase("W"))
        {
            return new Woman();
        }else if(arg.equalsIgnoreCase("R"))
        {
            return new Robot();
        }else
        {
            return null;
        }
    }
	}
test . java
package test2;
import java.util.Scanner;
public class test {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan = new Scanner(System.in);
		  System.out.print("请输入参数:");
		  String s = scan.nextLine();
		  
		try{
            Person p = Nvwa.Personjudge(s);
            p.make();
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
		scan.close();
	}
}
4.3 运行截图

 
                    
                

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号