设计模式之工厂设计模式(一:简单工厂模式与工厂方法模式)

工厂模式:用来实例化有共同接口的类,应用工厂模式能够动态决定实例化哪个类spa

工厂模式的分类:code

一、简单工厂模式(Simple Factory)blog

二、工厂方法模式(Factory Method)接口

*三、抽象工厂模式(Abstruct Factory)产品

(本文先介绍总结简单工厂模式和工厂方法模式,抽象工厂模式比较复杂。。等我弄懂了再另开一篇文章来介绍总结)class

 

一、简单工厂模式(Simple Factory):方法

  又叫静态工厂,主要是一个静态方法,经过if语句来动态实现须要实现的类。咱们经过产品A,产品B的例子来讲明:
im

1.首先为全部的产品定义一个共同的产品接口总结

1 public interface Product{}

2.而后,咱们让全部产品都实现这个接口static

 1 public class ProductA implements Product{ 
 2    public ProductA(){ 
 3        System.out.println("ProductA被制造了"); 
 4    } 
 5 } 
 6  
 7 public class ProductB implements Product{ 
 8    public ProductB(){ 
 9        System.out.println("ProductB被制造了"); 
10    } 
11 } 

3.最后,咱们写一个工厂类来动态实现以上的产品类

1 public SimpleFactory{
2     public static Product create(String s){
3         if(s.equals("ProductA"))
4             return new ProductA();
5         else if(s.equals("ProductB"))
6             return new ProductB();
7         }
8 }

  由此,咱们能够看出,当用户输入不一样的产品名时,工厂就会产生对应的产品。但实际上,简单工厂模式有不少局限性。好比说要添加新产品时,就须要再写一段else if代码进去,并且产品之间必需要同一级的,不能有复杂的层次关系,倘若产品数十分多,那往后维护起来是至关困难的。最致命的是,简单工厂模式其实只是依赖SimpleFactory这一个类,若是这个类出了问题,工厂就不能工做。

  这一致命性的缺点将在工厂方法模式中获得解决。

 

二、工厂方法模式(Factory Method):

  工厂方法为工厂类定义了接口,用多态来削弱了工厂类的职能。

1.跟简单工厂模式同样,先定义产品类共同的接口:

 1 public interface Product{} 

2.为工厂类定义共同接口:

1 public interface Factory{
2     public Product create();
3 }

3.让全部产品实现产品接口:

 1 public class ProductA implements Product{ 
 2    public ProductA(){ 
 3        System.out.println("ProductA被制造了"); 
 4    } 
 5 } 
 6  
 7 public class ProductB implements Product{ 
 8    public ProductB(){ 
 9        System.out.println("ProductB被制造了"); 
10    } 
11 }

4.接下来是工厂方法的核心部分,建立实现具体产品的具体工厂类

 1 //建立ProductA的工厂 
 2 public class FactoryA implements Factory{ 
 3     public Product create(){ 
 4           return new ProductA(); 
 5     } 
 6 } 
 7  
 8 //建立ProductB的工厂 
 9 public class FactoryB implements Factory{ 
10     public Product create(){ 
11           return new ProductB(); 
12     } 
13 }

  因而可知,工厂方法模式与简单工厂模式的区别在于:工厂方法模式是一个工厂对应一个类,而不像简单工厂模式那样把生产产品的职能都放在同一个类里边,这样的好处就是,若是其中一个类出了问题,其余的类还能正常工做,相互之间不受影响。固然,工厂方法模式也有局限的地方:当产品之间存在复杂的层次关系时,就须要构建多个工厂,这样就产生了所谓的“类爆炸”,对于之后的维护来讲也是至关不利的。要解决这个复杂的层次关系的问题,咱们能够用最后一种工厂模式,即抽象工厂模式来解决,但因为抽象工厂模式比较复杂,本人也不太会说明,因此我会另开一篇从别处转载的文章来讲明抽象工厂模式,对读者形成不便请谅解!

相关文章
相关标签/搜索