跳到主要内容

创建型模式概述

什么是创建型模式?

创建型模式(Creational Patterns)关注对象的创建过程,它们提供了一种在创建对象的同时隐藏创建逻辑的方式。这种模式在创建对象时能够提供更大的灵活性和可复用性。

为什么需要创建型模式?

在软件开发中,对象的创建可能会导致以下问题:

  1. 代码重复
  2. 耦合度高
  3. 复杂度增加
  4. 可维护性差

创建型模式通过以下方式解决这些问题:

  1. 封装对象的创建过程
  2. 隐藏具体类的实例化细节
  3. 提供更灵活的对象创建方式
  4. 降低系统的耦合度

创建型模式的分类

1. 单例模式(Singleton Pattern)

核心思想:确保一个类只有一个实例,并提供一个全局访问点。

主要应用场景

  • 处理资源访问冲突
  • 全局计数器
  • 系统配置类
  • 线程池管理

实现方式

  • 饿汉式
  • 懒汉式
  • 双重检测
  • 静态内部类
  • 枚举实现

2. 工厂模式(Factory Pattern)

核心思想:定义一个创建对象的接口,让子类决定实例化哪个类。

主要应用场景

  • 对象的创建逻辑比较复杂
  • 不同环境创建不同对象
  • 处理大量具有相同属性的小对象

实现方式

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

3. 建造者模式(Builder Pattern)

核心思想:将一个复杂对象的构建过程与它的表示分离。

主要应用场景

  • 对象构造过程复杂
  • 需要生成不同形式的对象
  • 对象的构建需要遵循特定的步骤

实现特点

  • 支持链式调用
  • 可以设置默认值
  • 构建过程更加清晰
  • 支持参数校验

4. 原型模式(Prototype Pattern)

核心思想:通过复制现有对象来创建新对象。

主要应用场景

  • 对象创建成本高
  • 需要复制复杂对象
  • 频繁创建相似对象

实现方式

  • 浅拷贝
  • 深拷贝
  • 序列化拷贝

如何选择合适的创建型模式?

  1. 使用单例模式,当:

    • 需要确保全局只有一个实例
    • 需要避免资源访问冲突
    • 需要节省系统资源
  2. 使用工厂模式,当:

    • 不知道具体要创建哪种对象
    • 需要解耦对象的创建和使用
    • 需要批量创建相似对象
  3. 使用建造者模式,当:

    • 对象构造过程复杂
    • 需要细粒度控制对象创建
    • 构造参数较多且有依赖关系
  4. 使用原型模式,当:

    • 对象创建成本高
    • 需要避免重复初始化
    • 对象之间差异较小

创建型模式的最佳实践

1. 通用原则

  • 遵循单一职责原则
  • 保持代码的可扩展性
  • 注意线程安全问题
  • 考虑性能影响

2. 注意事项

  • 不要过度使用设计模式
  • 根据实际需求选择合适的模式
  • 注意模式之间的组合使用
  • 保持代码的简洁性

3. 常见问题

  • 创建对象的性能问题
  • 线程安全问题
  • 对象创建的时机
  • 内存资源的管理

总结

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

  • 单例模式用来创建全局唯一对象。
  • 工厂模式用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由外部给定的参数决定创建那种类型的对象。
  • 建造者模式是用来创建复杂对象,可以通过设置不同的可选参数,定制化地创建不同的对象。
  • 原型模式针对创建成本比较大的对象,利用已有对象进行复制的方式进行创建,以达到节省创建时间的目的。