简单工厂模式、工厂方法模式、抽象工厂模式都属于创建型模式。这三个模式都是为了解决对象的创建而生。这三个工厂模式就像孪生兄弟一样,总是让人傻傻分不清楚。今天就依据个人理解对三个模式总结对比一下。
一、定义
模式 | 定义 |
---|---|
简单工厂 | 别名静态工厂方法(Static Factory Method )模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。 |
工厂方法 | 定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 |
抽象工厂 | 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。 |
二、结构
三、角色关系
简单工厂 | 工厂方法 | 抽象工厂 |
---|---|---|
工厂角色 抽象产品角色 |
抽象产品 _ 具象产品 抽象工厂 _ 具象工厂 |
抽象产品 _ 具象产品 抽象工厂 _ 具象工厂 |
四、总结
简单分析三种模式的结构图以及所拥有的结构关系,我们不难看出三种模式的不同点:
- 创建过程
简单工厂 | 工厂方法 | 抽象工厂 | |
---|---|---|---|
创建过程 | 由工厂内部直接根据不同条件创建 | 定义一个抽象创建产品接口,将实例化过程延迟到子类 | 提供一个创建一系列或者相关依赖对象的接口,有子类实现实例化 |
区别 | 1.将客户端判断逻辑抽象到工厂内 2. 用来生产同一等级结构中的任意产品,无法新增产品
|
1.判断逻辑依旧在客户端 2. 用来生产同一等级结构中的固定产品,可任意增加新产品
|
1.判断逻辑依旧在客户端 2. 用来生产不同产品族的全部产品,不可任意增加新产品,可添加任意产品族
|
-
工厂模式的退化
当抽象工厂模式中每一个具体工厂类只创建一个产品对象,也就是只存在一个产品等级结构时,抽象工厂模式退化成工厂方法模式;当工厂方法模式中抽象工厂与具体工厂合并,提供一个统一的工厂来创建产品对象,并将创建对象的工厂方法设计为静态方法时,工厂方法模式退化成简单工厂模式。
以上三种工厂 方法在等级结构和产品族这两个方向上的支持程度不同。所以要根据情况考虑应该使用哪种方法。