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

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

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

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

  (2)实例:

   抽象产品类

 public abstract class ProductNoodle {
public abstract String description();
}

具体产品类

 public class ConcreteNoodleA extends ProductNoodle {

     @Override
public String description() {
return "加葱的面条";
} }
 public class ConcreteNoodleB extends ProductNoodle {

     @Override
public String description() {
return "加蒜的面条";
} }

抽象工厂类

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

具体工厂类

 public class ConcreteFactoryA extends NoodleFactory {

     @Override
public ProductNoodle createNoodle(String type) {
if("A".equals(type)){
return new ConcreteNoodleA();
}
if("B".equals(type)){
return new ConcreteNoodleB();
}
return null;
} }

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

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

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

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

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

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

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

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

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

上一篇:设计模式之工厂模式之抽象工厂(php实现)


下一篇:[转]推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler