设计模式之创建型模式学习

图片来至百度搜索

内容来源:《设计模式-可复用面向对象软件基础》、网络。
本文主要是记录概念,加深理解,方便查阅。

AbstractFactory(抽象工厂)

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

适用性

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

结构图

abs-factory

优缺点

  • 它分离了具体的类。
  • 它使得易于交换产品系列。
  • 有利于产品的一致性。
  • 难以支持新种类的产品。

伪代码实例

小结

Builder

将一个复杂对象的创建与它的表示分离,使得同样的构建过程可以创建不同的表示。

适用性

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

结构图

builder

优缺点

  • 它使你可以改变一个产品的内部表示。
  • 它将构造代码和表示代码分开。
  • 它使你可对构造过程进行更精细的控制。

相关源码实现

  • okhttpClient类
  • Android系统相关Builder

FactoryMethod(工厂方法)

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

适用性

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

结构图

factory-method

优缺点

  • 工厂方法不再将于特定应用有关的类绑定到你的代码中。代码仅处理Product接口。

ProtoType(原型)

用原型指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

适用性

  • 当要实例化的类是在运行时刻执行的,例如,通过动态加载;
  • 为了避免创建一个与产品类层级平行的工厂类层级时。
  • 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。

结构图

prototype

优缺点

  • 运行时刻增加或删除产品
  • 改变值以指定新对象
  • 改变结构以指定新对象
  • 减少子类的创建
  • 用类动态配置应用

Singleton(单例)

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

适用性

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

结构图

singleton

优缺点

  • 对唯一实例的受控访问
  • 缩小名空间
  • 允许对操作和表示的精化

创建型模式的讨论

创建模式就是对对象实例化的抽象,隐藏创建过程、细节,将实例化工作委托给另一个对象。

模式伪代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,874评论 18 399
  • 前段时间,在自己糊里糊涂地写了一年多的代码之后,接手了一坨一个同事的代码。身边很多人包括我自己都在痛骂那些乱糟糟毫...
    丑小丫大笨蛋阅读 648评论 0 2
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 4,003评论 1 15
  • 不知道为什么很欣赏林丹在被爆出轨后大方承认的态度,真爷们,坦荡荡的。总比狡辩来的强。 乐嘉曾问过:精神出轨和肉体出...
    夏河马阅读 195评论 0 0
  • 现在很多职场人都职场里面很多时候都会让自己深陷潜规则之中,当然我们说的这个潜规则是偏良性的,下面就让小编来为你说说...
    职场观察员阅读 290评论 0 0