软件设计师-创建型设计模式

75 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情

创建型设计模式

工厂方法模式 Factory Method

简单工厂模式

  • 不符合面向对象中的开放-封闭原则(对扩展开放,对选择封闭)

image.png

意图

  • 定义一个用于创建对象的接口,让子类绝对实例化哪一个类,使一个类的实例化延迟到其子类。

image.png

适用性

  • 当一个类不知道它必须创建的对象的类的时候
  • 当一个类希望由它的子类来指定它所创建的对象的时候
  • 当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个帮助子类是代理者这一信息局部化的时候

抽象工厂模式 Abstract Factory

意图

  • 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它具体的类

image.png

适用性

  • 一个系统要独立于图的产品的创建,组合和表示时
  • 一个系统要由多个产品系列中的一个来配置时
  • 当要强调一系列相关产品的对象的设计以便进行联合使用时
  • 当提供一个产品类库,只想显示他们的接口而不是实现时

生成器模式 Builder

意图

  • 将一个复杂对象的构建与它的表示分离

image.png

适用性

  • 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
  • 当构造过程必须被构造的对象有不同的表示时

原型模式 Prototype

意图

  • 用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象

适用性

  • 当一个系统应该独立于它的产品创建、构成和表示时
  • 当要实例化的类是在运行时刻指定,例如,动态装载
  • 为了避免创建一个与产品层次平行的工厂类层次时
  • 当一个类的实例只能有几个不同状态组合中的一种时,建立相应数目的原型并克隆它们,可能比每次用合适的状态手工实例化该类更方便一些

单例模式 Singleton

意图

  • 保证一个类仅有一个实例,并提供一个访问它的全局访问点

适用性

  • 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时
  • 当这个唯一实例应该是通过子类化可扩展的,并且客户无趣更改代码就能使用一个扩展的实例时