zoukankan      html  css  js  c++  java
  • 工厂模式(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)工厂方法:通过子类来创建对象,这种做法,客户只需要知道他们使用的是抽象类就可以了,而由子类负责创建具体类型。

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

  • 相关阅读:
    序列化和反序列化(2)[Serializable] 转
    http错误列表(转)
    公共Webservice
    序列化和反序列化(1)[Serializable]
    序列化中的[NonSerialized]字段 转
    后台调用前台js
    http的请求和响应过程2
    命名规则
    tsql LastIndexOf
    js产生随机数
  • 原文地址:https://www.cnblogs.com/mxmbk/p/5088131.html
Copyright © 2011-2022 走看看