核心本质:

  • 实例化对象不使用new,用工厂方法代替。
  • 将选择实现类,创建对象统一管理和控制。从而将调用者和实现类解耦。

三种模式:

  • 简单工厂模式(又称静态工厂模式):用来生产同一等级结构的任意产品(对于增加新的产品,需要扩展已有代码)
  • 工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品)
  • 抽象工厂模式:围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。

小结:

  • 简单工厂模式(又称静态工厂模式):虽然某种程度上不符合设计原则,但实际使用最多。
  • 工厂方法模式:不修改已有类的前提下,通过增加新的工厂类实现扩展。
  • 抽象工厂模式:不可以增加产品,可以增加产品族。

抽象工厂

image-20200722201536370.png
运作方式:

  1. 声明一个创建产品对象工厂的一个接口。(AbstractFactory
  2. 根据这个接口来实现创建具体Product的操作(ConcreteFactory)
  3. Product必须符合AbstractProduct的要求

优缺点:

  • 分离了具体的类,将客户与具体类分离,客户通过类的接口(AbstractFactory和AbstractProduct)来控制实例。
  • 有利于产品的一致性:当一个应用只能够使用一个系列的产品时(HUAWEI我买爆 QAQ),AbstractFactory很容易实现这一点。
  • 缺点:难以支持新的类型,因为当AbstractFactory改变时(例如添加一个产品的生产方式),涉及到该接口的类和子类都将需要改变。

方法工厂

image-20200723143547076.png

结构:

  • Product:产品接口,定义产品的一些特性
  • ConcreteProduct:产品实例
  • Creator:工厂接口,声明工厂方法,返回一个Product对象。
  • ConcreteProduct:返回一个ConcreteProduct实例

参数化工厂:通过传递一个用于标识被创建对象种类 的参数,使得工厂可以创建多种产品,一个参数工厂一般有以下形式

  1. interface Creator{
  2. public Product create(ProductId id);
  3. }
  4. pubic class ConcreteCreator implement Creator{
  5. public Product create(ProductId id){
  6. if(id==prod1) return new prod1;
  7. if(id==prod2) return new prod2;
  8. }
  9. }