(从左到右Ralph JohnsonRichard HelmErich GammaJohn Vlissides)

建筑大师Christopher Alexander说过:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。

1991-1992 年,以“四人组(Gang of Four,简称 GoF)”自称的四位著名软件工程学者将模式的思想引入软件工程方法学。

1994 年,GoF 出版了《设计模式》一书,其中包含了 23 种常用的设计模式。GoF 在该书中指出:

  • 设计模式描述了在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。设计模式捕获了随时间进化与发展的问题的求解方法,因此它们并不是人们从一开始就采用的设计方案。它们反映了不为人知的重新设计和重新编码的成果,而这些都来自软件开发者为了设计出灵活可复用的软件而长时间进行的艰苦努力。设计模式捕获了这些解决方案,并用简洁易用的方式表达出来。

有了面向对象的基础(封装、继承、多态),不一定能设计出有弹性的、可复用的、可维护的系统,设计模式旨在达到这个目的。借助设计模式,我们可以使用更好的代码结构,以此来控制和应对代码的复杂性,提高代码的可扩展性。

但是也不能一味的盲从设计模式,所以 GoF 给出了建议:

  • 模式是工具而不是规则,需要被适当地调整以符合你的需求。—— Erich Gamma

  • 为实际需要的扩展使用模式。不要只是为了假想的需要而使用模式。—— Richard Helm

  • 简单才是王道。如果你不用模式就能够设计出更简单的方案,那就去做吧。—— Ralph Johnson

  • 今天的模式比《设计模式》一书中的更多,你都应有所了解。—— John Vlissides

下面是关于设计模式的文章。

前言:

创建型: 主要解决对象的创建问题

结构型: 主要解决类或对象的组合问题

行为型: 主要解决类或对象之间的交互问题

设计模式类图:

  • 简单工厂模式-将对象的创建封装起来:

  • 工厂方法模式:

  • 抽象工厂模式:


  • 装饰者模式-动态的包装原有对象的行为

  • 适配器模式-让不兼容的接口得以适配

  • 外观/门面模式-简化子系统的复杂性

  • 代理模式-访问对象的代理而非其本身

  • 组合模式-统一的处理个别对象与组合对象


  • 策略模式-定义一个算法族

  • 观察者模式-将消息通知给观察者

  • 命令模式-将请求封装成对象

  • 模板方法模式-封装一套算法流程

  • 迭代器模式-统一集合的遍历方式

  • 状态模式-将状态和行为封装成对象