编程进阶网编程进阶网
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 01.创建型模式导读
  • 02.结构型模式导读
  • 03.行为型模式导读

01.创建型模式导读

目录介绍

  • 01.创建型模式
  • 02.包含模式
  • 03.解决什么问题
  • 04.简单介绍

01.创建型模式

  • 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。
  • 为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。
  • 创建型模式在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。

02.包含模式

  • 分类
    • 简单工厂模式(Simple Factory)
    • 工厂方法模式(Factory Method)
    • 抽象工厂模式(Abstract Factory)
    • 建造者模式(Builder)
    • 原型模式(Prototype)
    • 单例模式(Singleton)
  • 常见的有
    • 单例模式
    • 工厂模式
    • 建造者模式

03.解决什么问题

  • 主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。

04.简单介绍

4.1 单例模式

  • 单例模式用来创建全局唯一的对象。
    • 一个类只允许创建一个对象(或者叫实例),那这个类就是一个单例类,这种设计模式就叫作单例模式。
    • 单例有几种经典的实现方式,它们分别是:饿汉式、懒汉式、双重检测、静态内部类、枚举。
  • 有些人认为单例是一种反模式(anti-pattern),并不推荐使用,主要的理由有以下几点:
    • 单例对 OOP 特性的支持不友好
    • 单例会隐藏类之间的依赖关系
    • 单例对代码的扩展性不友好
    • 单例对代码的可测试性不友好
    • 单例不支持有参数的构造函数

4.2 工厂模式

  • 工厂模式用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定创建哪种类型的对象。
    • 实际上,如果创建对象的逻辑并不复杂,那我们直接通过 new 来创建对象就可以了,不需要使用工厂模式。当创建逻辑比较复杂,是一个“大工程”的时候,就考虑使用工厂模式,封装对象的创建过程,将对象的创建和使用相分离。
  • 当每个对象的创建逻辑都比较简单的时候,推荐使用简单工厂模式,将多个对象的创建逻辑放到一个工厂类中。
    • 当每个对象的创建逻辑都比较复杂的时候,为了避免设计一个过于庞大的工厂类,我们推荐使用工厂方法模式,将创建逻辑拆分得更细,每个对象的创建逻辑独立到各自的工厂类中。
  • 详细点说,工厂模式的作用有下面4个,这也是判断要不要使用工厂模式最本质的参考标准。
    • 封装变化:创建逻辑有可能变化,封装成工厂类之后,创建逻辑的变更对调用者透明。
    • 代码复用:创建代码抽离到独立的工厂类之后可以复用。
    • 隔离复杂性:封装复杂的创建逻辑,调用者无需了解如何创建对象。
    • 控制复杂度:将创建代码抽离出来,让原本的函数或类职责更单一,代码更简洁。

4.3 建造者模式

  • 建造者模式由来
    • 存在一些复杂的对象,它们拥有多个组成部分。如汽车,它包括车轮、方向盘、发送机等各种部件。而对于大多数用户而言,无须知道这些部件的装配细节,可以通过建造者模式对其进行设计与描述。
  • 建造者模式定义
    • 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式用来创建复杂对象,可以通过设置不同的可选参数,“定制化”地创建不同的对象。
  • 建造者模式的思考
    • 实现非常简单,掌握起来并不难,难点在于应用场景。
  • 构建复杂对象的实现方案
    • 举一个例子,配置资源池,里面的参数有:最大数,最小数,前台线程数,名称,复用池,日志监听,等等。而你需要根据不同的场景配置不同的对象。
    • 第一种方案:通过new构造函数去创建对象,比如通过4个参数,5个参数,6个参数去构建对象,则需要大量的构造函数,每次改动都不好维护
    • 第二种方案:通过new构造对象,然后通过set去设置参数,代码可读性和易用提高,但是set破坏了对象不可变性,违背了对象在创建好之后就不能再修改内部的属性值。
    • 第三种方案:通过建造者方式构建对象,一次性构建参数,并且可以统一对参数进行校验,满足了构建复杂对象的场景要求。

4.4 原型模式

  • 如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同)
    • 在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式,来创建新对象,以达到节省创建时间的目的。
    • 这种基于原型来创建对象的方式就叫作原型模式。
贡献者: yangchong211
下一篇
02.结构型模式导读