1. 意义
“创建型模式”是GoF设计模式的第一大类,主要包括了工厂模式、单例模式、原型模式和建造者模式4种。本篇,我们对创建型模式进行一个小结。
存在的意义:
- 创建型模式隐藏了了类的实例化过程,客户端使用目标类时,不需要NEW,而是通过创建模式提供的实例化方法来获取对象
- 这样,创建型模式在创建什么,谁创建它,它是怎么被创建的,以及何时创建这些方面提供了很大灵活性
- 创建型模式可以独立使用,当然,也是可以结合使用的。例如工厂方法模式和单例模式结合,单例存放在工厂类中,工厂方法返回单例的实例对象。
典型代码:
下面给出了工厂模式、单例模式、原型模式和建造者模式的典型代码:
- CL_Factory=>CREATE()
- CL_Singleton=>GetInstance()
- lo_instance->Clone()
- lo_director->Construct( lo_builder)
使用原则:
- 在理想情况下,我们在合适的场景下,选择适合的创建型模式。但在实际开发过程中,我们是没办法预测未来、预测到所有的需求和场景,这也就是代码“重构”存在的意义。面对新的开发任务时,对于创建型模式,我们通常是从工厂方法模式开始,当设计者发现需要更大的灵活性时,通过代码重构向其它创建型模式演化。
- 设计者在设计标准之间进行权衡时,了解更多的设计模式,可以给架构选型提供更多的思路,这也是本篇博客汇总、对比各个创建型模式的意义 😃
2. 辨析
下表汇总了创建型模式,各位同学可通过对应的链接,导航至具体的模式,进一步查看解析和实例代码。
目的/场景 | 典型代码 | |
---|---|---|
工厂模式家族(Factory Patterns Family) | 将一个类(或多个相关类)的实例化过程,封装到Create()工厂方法、工厂接口中 | CL_Factory=>CREATE() |
单例模式(Singleton Pattern) | Singleton类,定义一个GetInstance()操作,允许客户访问它的唯一实例。GetInstance()是一个静态方法,主要负责创建自己的唯一实例。 | CL_Singleton=>GetInstance() |
原型模型(Prototype Pattern) | 在原型类中,实现一个克隆自身的操作clone(), 从而让一个原型可以克隆自身,从而创建一个新的对象。 | lo_instance->Clone() |
建造者模式(Builder Pattern) | Builder完成构造和装配各个部件,Director调用Builder,按Director定义的规则构建生产具体的Product实例 | lo_director->Construct( lo_builder) |
便于更清晰的对比,下表中也展示了工厂模式家族的成员的特点。其实,工厂模式家族的核心点也即:将一个类(或多个相关类)的实例化过程,封装到Create()工厂方法、工厂接口中。
目的/场景 | 典型代码 | |
---|---|---|
简单工厂方法模式(Simple Factory Method Pattern) | 将对象实例化的创建过程,封装在目标类的CREATE方法中。 | CL_TARGET=>CREATE( ) |
简单工厂模式(Simple Factory Method Pattern) | 将对象实例化的创建过程,封装在一个独立的类中。工厂类中包含分支结构,依据场景创建相应的实例。 | CL_FACTORY=>CREATE( iv_type ) |
工厂方法模式(Factory Method Pattern) | 定义一个用于创建对象的接口,让工厂类决定实例化哪一个生产类。工厂方法使一个生产类的实例化,延迟到对应的工厂子类中。每一个生产类,都有一个与之对应的工厂类。 | CL_FACTORY_A=>CREATE( ); CL_FACTORY_B=>CREATE( ) |
抽象工厂模式(Abstract Factory Pattern) | 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。工厂类中提供了多个创建方法,分别负责相关类的实例化。一个工厂类,对应的多个相关的生产类。 | CL_FACTORY_A=>CREATE_USER( ); CL_FACTORY_A=>CREATE_PRODUCT( ). CL_FACTORY_B=>CREATE_USER( ); CL_FACTORY_B=>CREATE_PRODUCT( ) |
以上,是本篇对GoF创建型模式的总结,欢迎分享、留言。😉
本博客专注于技术分享,干货满满,持续更新。
欢迎关注❤️、点赞👍、转发📣!