设计模式之工厂模式

工厂设计模式分为三种模式:简单工厂模式、工厂方法模式和抽象工厂模式。

什么是简单工厂模式?
举个例子:假设现在有一个造纸的工厂,我不管你是怎么生产的,只要我向这个工厂要A4纸,这个工厂就能给我A4纸,我要B5类型的纸,你就给我B5类型的纸;
这种将类的实例化交给工厂来实现,客户端不用关心实现细节的方式就是简单工厂模式;

我们用个类图来说明一下这个简单工厂模式:
有一个抽象产品类,多个具体子类,一个工厂类,工厂里有个creatPaper()的方法,客户端需要什么类型的纸,就创建什么样的具体子类

代码实现:

  import java.util.Scanner;           
    //抽象产品类
  interface Paper {              
       void creatPaper();                    
	   }     
	   //具体产品类   
  class A4Paper implements Paper {             
    @Override             
	   public void creatPaper() {                  
	       System.out.println("A4 纸");                
		   }              
		  } 
   class B5Paper implements Paper {                  
    @Override                   
	   public void creatPaper() {                    
	       System.out.println("B5 纸");                  
		   }                
		  } 
	//工厂类
   class PaperFactory {              
       public static Paper getInstance(String type){                 
	       Paper paper = null;                    
		   if(type.equals("A4")){                      
		     paper = new A4Paper();                     
			 }else if(type.equals("B5")){                       
			   paper = new B5Paper();                     
			   }                   
		   return paper;                   
		   }                 
		  }     
	//客户端
   public class Client {           
       public void buyPaper(Paper paper){             
	    paper.creatPaper();               
		 } 
       public static void main(String[] args) {         
	      Client client = new Client();         
		  Scanner scanner = new Scanner(System.in);         
		  System.out.println("请您输入您想要的纸的类型:");         
		  String type = scanner.nextLine();         
		  client.buyPaper( PaperFactory.getInstance(type));             
		  }          
		} 

什么是工厂方法模式?
工厂方法模式相比简单工厂模式就是将工厂抽象,有多个具体的工厂类来实现这个抽象工厂,客户端想要哪个产品,抽象工厂就去该工厂去要这个产品,比如说,现在有A4型的造纸厂,还有B5型的造纸厂,客户端要A4纸的时候,抽象工厂就去向A4造纸厂去要A4纸,然后由A4工厂造A4纸;

类图:
多个抽象工厂类,多个具体工厂类,一个抽象产品类,多个具体产品类

代码实现:

    //抽象产品类
 interface Paper {       
    void creatPaper();       
	}   
	//具体产品类  
  class A4Paper implements Paper {     
    @Override     
	  public void creatPaper() {         
	   System.out.println("A4 纸");    
	   } 
   }    
  class B5Paper implements Paper {    
    @Override     
	  public void creatPaper() {         
	    System.out.println("B5 纸");     
		}  
	}     
	//抽象工厂类
  interface PaperFactory{     
     Paper createFactory(); 
	 } 
	 //具体工厂类
  class A4Factory implements PaperFactory {     
    @Override     
	 public Paper createFactory() {
	   return new A4Paper();     
	   } 
	  }
  class B5Factory implements PaperFactory {
	 @Override     
	 public Paper createFactory() {         
	    return new B5Paper();     
		} 
	}    
	//客户端
	 public class Client {     
	   public void buyPaper(Paper paper){        
  	   paper.creatPaper();
	   } 
     public static void main(String[] args) {         
	   Client client = new Client();         
	   client.buyPaper(new A4Factory().createFactory());     
	   } 
	  }

再说什么是抽象工厂模式:
抽象工厂模式就是说有多个抽象产品类,比如说,我想要一辆装有宝马发动机的奔驰,这样的产品实现的时候就可以将发动机再抽象出来,有多个类型的发动机来实现这个发动机产品类,每个工厂制造一种车,比如说,有一个专门造带有宝马发动机的奔驰车,这种的就是抽象工厂模式;

类图:
多个抽象产品类、多个具体子类、多个抽象工厂类、多个具体子类代码实现:

//抽象产品类
 interface  Product{     
    public void method(); 
	} 
 //具体产品类
  class A implements Product{ 
    @Override
	 public void method() {         
	   System.out.println("这是 A");    
	   } 
	 } 
  class B implements Product{ 
    @Override     
	public void method() {
	   System.out.println("这是 B");
	   } 
	 } 
	//抽象产品类
  interface Product2 {    
    void method1(); 
	} 
	//具体产品类
  class C implements Product2 { 
    @Override     
	public void method1() {
	  System.out.println("这是 A 的姊妹产业 C");     
	  }
	} 
   class D implements Product2 { 
    @Override     
	public void method1() {         
	  System.out.println("这是 B 的姊妹产业 D");     
	  } 
	 } 
	//抽象工厂类
   interface Factory {    
     Product creat();    
 	 Product2  recreat(); 
	 } 
	 //具体工厂类
   class Factory1 implements Factory{ 
    @Override    
      public Product creat() {         
	    return new A();    
		} 
    @Override    
	  public Product2 recreat() {         
	    return new C();    
		} 
	} 
   class Factory2 implements Factory { 
    @Override    
      public Product creat() {         
	    return new B();     
		} 
    @Override
	  public Product2 recreat() {        
        return new D();     
		} 
	 }
	 //客户端
   public class Client {
      public void buyProduct(Product  product ){        
    	  product.method();
		  }    
	  public void buyProduct2(Product2  product2 ){        
     	  product2 .method1();     
		  } 

接下来我们看一看这三种模式的优缺点:
在这里插入图片描述
这就是这三种工厂模式啦。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值