概要
创造型设计模式在设计模式三个类别中算是思想最简单,最容易学习的一个类型。核心思想就是在特定的场景下灵活地创建类或者对象。 其中还包含了几乎所有人学会的第一个设计模式-单例模式。创造型一共包含5个模式, 分别为抽象工厂模式,工厂方法模式,构建者模式,单例模式,原型模式。(还有一个简单工厂模式,但它不属于23种设计模式)。
| 名称 | 场景 | 优点 | 缺点 | 核心思想 | 生活中例子 | 代码例子 |
|---|---|---|---|---|---|---|
| 单例模式 | 整个系统只需要一个例子,例如工具类 | 减少内存开销 | 只有一个类,扩展困难 | 独一无二 | 我 | 无 |
| 工厂方法模式 | 需要创建一个产品,而产品有不同的品牌 | 扩展性强,屏蔽具体实现 | 每增加一个产品就要增加一个工厂 | 一个产品线,实例化给到工厂 | 手机工厂 | 工厂方法 |
| 构建者模式 | 1.复杂的对象构建 2.一个对象参数多,部分必填,简化构造函数 | 分离创建过程 | 复杂性增加 | 1.链式调用 2.不同的参数顺序,结果不同 | 汽车选配,不同价格不同参数,不同结果 | 构建者模式 |
| 原型模式 | 系统里面一个对象以及他的引用太多,需要提升性能(基本不会适用) | 提高性能 | 落地困难,对于JDK中自带的接口为浅拷贝,如果引用过多,工作量大。若需要深拷贝,每个引用的对象都需要NEW/序列化 | 复制对象 | 有丝分裂 | 原型模式 |
| 抽象工厂模式 | 需要创建一个产品簇,而产品有不同的品牌 | 当增加一个新的产品时只需增加一个新的具体工厂,不需要修改原代码,满足开闭原则 | 当产品族中需要增加一个新种类的产品时,则所有的工厂类都需要进行修改,不满足开闭原则 | 工厂的工厂,抽象工厂中每个工厂可以创建多种类的产品;而工厂方法每个工厂只能创建一类 | 小米工厂(手机,电脑,电视) | 抽象工厂 |
模式之间的差异与联系
- 抽象工厂、 生成器和原型都可以用单例模式来实现。
- 一般演化的过程:简单工厂->工厂方法->抽象方法
- 你可以在创建复杂组合模式树时使用生成器, 因为这可使其构造步骤以递归的方式运行。
- 你可以结合使用生成器和桥接模式: 主管类负责抽象工作, 各种不同的生成器负责实现工作。
- 抽象工厂模式与构建者的区别:抽象工厂着重一系列对象,并立马返回。构建者关注分步骤构建复杂对象。
学习建议
必学
- 单例模式
- 工厂方法模式
- 抽象工厂模式
- 构建者模式
选学
- 原型模式