设计模式 - 工厂三兄弟

360 阅读2分钟

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

一、定义

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

二、结构

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

三、角色关系

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

四、总结

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

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

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