创建型模式----工厂模式and抽象工厂模式

工厂模式

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

主要解决:主要解决接口选择的问题。

何时使用:我们明确地计划不同条件下创建不同实例时。

如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。

关键代码:创建过程在其子类执行。

步骤:

  1. 创建一个接口(形状shape);
  2. 创建实现接口的实现类(各种形状)。
  3. 创建一个工厂,生成基于给定信息的实体类的对象。(用一个方法来判断使用哪一个实现类)
  4. 使用该工厂,通过传递类型信息来获取实体类的对象(实例化步骤三的方法)。

创建型模式----工厂模式and抽象工厂模式
 

抽象工厂模式

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

主要解决:主要解决接口选择的问题。

何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。

如何解决:在一个产品族里面,定义多个产品。

关键代码:在一个工厂里聚合多个同类产品。

步骤:

  1. 为形状创建一个接口(Shape )。
  2. 创建(形状)实现接口的实体类(Rectangle 、Square、Circle)。
  3. 为颜色创建一个接口(Color )。
  4. 创建(颜色)实现接口的实体类(Red 、Green 、Blue )。
  5. 为 Color 和 Shape 对象创建抽象类来获取工厂。
  6. 创建扩展了 AbstractFactory 的工厂类,基于给定的信息生成实体类的对象(ShapeFactory 、ColorFactory )。
  7. 创建一个工厂创造器/生成器类,通过传递形状或颜色信息来获取工厂(FactoryProducer )。
  8. 使用 FactoryProducer 来获取 AbstractFactory,通过传递类型信息来获取实体类的对象(AbstractFactoryPatternDemo )。

创建型模式----工厂模式and抽象工厂模式