工厂模式(Factory)和抽象工厂模式(Abstract Factory)

一、工厂模式(Factory):通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的,工厂方法让类的实例化推迟到子类

  (1)涉及角色:抽象产品,具体产品,抽象创建者,具体创建者。

            

  (2)实例:

   抽象产品类

1 public abstract class ProductNoodle {
2     public abstract String description();
3 }

  具体产品类

1 public class ConcreteNoodleA extends ProductNoodle {
2     
3     
4     @Override
5     public String description() {
6         return "加葱的面条";
7     }
8     
9 }
1 public class ConcreteNoodleB extends ProductNoodle {
2 
3     @Override
4     public String description() {
5         return "加蒜的面条";
6     }
7     
8 }

抽象工厂类

1 public abstract class NoodleFactory {
2     public abstract ProductNoodle createNoodle(String type);
3 }

具体工厂类

 1 public class ConcreteFactoryA extends NoodleFactory {
 2     
 3     @Override
 4     public ProductNoodle createNoodle(String type) {
 5          if("A".equals(type)){
 6              return new ConcreteNoodleA();
 7          }
 8          if("B".equals(type)){
 9              return new ConcreteNoodleB();
10          }
11          return null;
12     }
13     
14 }

最后客户端直接调用工厂方法产生产品。可以按需求决定使用的具体工厂为哪个。

二、抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道实际产品的具体产品是什么,这样客户就从具体的产品中解耦出来。

     涉及角色:抽象产品,具体产品,抽象创建者,具体创建者。

    

 

 

三、工厂模式和抽象工厂区别:

    (1)工厂方法使用的是继承,抽象工厂方法使用的组合。

    (2)工厂方法:通过子类来创建对象,这种做法,客户只需要知道他们使用的是抽象类就可以了,而由子类负责创建具体类型。

            抽象工厂:提供一个用来创建一个产品家族的抽象类型,这个类型的子类定义了产品被产生的方法,要使用这个工厂,必须先实例化。然后传入抽象类型的代码中。

 

posted @ 2016-01-05 18:57  浮生若云  阅读(490)  评论(0编辑  收藏  举报