设计模式 - 工厂三兄弟

简单工厂模式、工厂方法模式、抽象工厂模式都属于建立型模式。这三个模式都是为了解决对象的建立而生。这三个工厂模式就像孪生兄弟同样,老是让人傻傻分不清楚。今天就依据我的理解对三个模式总结对比一下。设计

1、定义

模式 定义
简单工厂 别名静态工厂方法(Static Factory Method)模式。在简单工厂模式中,能够根据参数的不一样返回不一样类的实例。
工厂方法 定义一个建立对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。
抽象工厂 提供一个建立一系列相关或相互依赖对象的接口,而无需指定它们的具体类。

2、结构

简单工厂
工厂方法
抽象工厂

3、角色关系

简单工厂 工厂方法 抽象工厂
工厂角色
抽象产品角色
抽象产品
  _ 具象产品
抽象工厂
  _ 具象工厂
抽象产品
  _ 具象产品
抽象工厂
  _ 具象工厂

4、总结

简单分析三种模式的结构图以及所拥有的结构关系,咱们不难看出三种模式的不一样点:code

  • 建立过程
简单工厂 工厂方法 抽象工厂
建立过程 由工厂内部直接根据不一样条件建立 定义一个抽象建立产品接口,将实例化过程延迟到子类 提供一个建立一系列或者相关依赖对象的接口,有子类实现实例化
区别 1.将客户端判断逻辑抽象到工厂内
2.用来生产同一等级结构中的任意产品,没法新增产品
1.判断逻辑依旧在客户端
2.用来生产同一等级结构中的固定产品,可任意增长新产品
1.判断逻辑依旧在客户端
2.用来生产不一样产品族的所有产品,不可任意增长新产品,可添加任意产品族
  • 工厂模式的退化 当抽象工厂模式中每个具体工厂类只建立一个产品对象,也就是只存在一个产品等级结构时,抽象工厂模式退化成工厂方法模式;当工厂方法模式中抽象工厂与具体工厂合并,提供一个统一的工厂来建立产品对象,并将建立对象的工厂方法设计为静态方法时,工厂方法模式退化成简单工厂模式。

以上三种工厂 方法在等级结构和产品族这两个方向上的支持程度不一样。因此要根据状况考虑应该使用哪一种方法。cdn

相关文章
相关标签/搜索