设计模式的起源
模式之父Christopher Alexander(克里斯托弗﹒亚历山大),哈佛大学建筑学博士,美国加州大学伯克利分销建筑学教授,加州大学伯克利分校环境结构研究所所长,美国艺术和科学院院士等,Charistopher Alexander博士及其研究团队用了约20年的时间,对住宅和周边环境进行大量的调查研究和资料收集工作,发现人们对舒适住宅和城市环境存在一个共同的认同规律,Christopher Alexander在著作A Patter Languager: Towns,Buildings,Construcion中把这些认同的规律归纳为253个模式,每个模式从前提条件,目标问题,解决方案3个方面进行了描述,并给出从用户需求分析到建筑环境结构设计直至经典案例的过程模型。
Christopher Alexander的《建筑的永恒经典》给出了模式的定义,每个模式都描述了一个在我们环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的成功的解决方案,无须再重复相同的工作。
1990年,软件工程界开始关注Christopher Alexander的模式总结,最早在软件工程中引入模式是1991-1992年以“四人组(Gang of Four,简称GoF,分别是Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides”自称的4位著名软件工程学着,在1994发表了23中软件开发中使用率较高设计模式,GoF将模式的概念引入软件工程领域,这标志着软件模式的诞生。
什么是设计模式
设计模式的一般定义是:一套被反复使用的,多数人知晓的,经过分类编目的,代码设计经验的总结,使用设计模式是为了可重用代码,让代码更容易被他人理解并且保证代码可靠性。
狭义的设计模式是指GoF在《设计模式:可复用面向对象软件的基础》介绍的23种经典的设计模式,当然设计模式不仅23种。设计模式一般包括模式名称,问题,解决方案和效果。
模式名称大多数都是根据其功能或模式结构来命名的,问题描述了应该在何时使用模式,解决方案描述了一个设计模式的组成部分,以及这些组成部分之间的相互关系,各自的职责和写作方式,效果描述了模式的优缺点以及使用模式时应权衡的问题。
为什么会有设计模式
因为有需求,就会有相应的产品的诞生,即使没有,也只是时间的问题。正是如此,在软件开发中,时刻有这各种各样的开发需求,需求的实现之间又有些重复,同时,在软件开发中,对一个需求的解决,并不仅限于当前问题的解决,还需要有长期的维护和功能的扩展,如何编写代码,设计软件的软架构是一个问题,正是这个缘故,我们需要一套可以解决代码框架的模式,因此,设计模式在这样的需求上产生的。
设计模式作用
⑴避免做一些重复性的工作,有助于提高设计和开发效率,设计模式是众多专家的经验和智慧的结晶,是从优秀的软件系统中总结出来的。
⑵合理的设计模式有助于别人快速的了解系统,快速的了解设计思路和实现方案。
⑶大部分设计模式都兼顾了系统的可重用性和可扩展性,使得系统的扩展和重用相对容易。
⑷可以有助于新手了解面向对象的思想,设计模式几乎都遵循面向对象的设计原则,但在实际项目中,并不是呆板的按照原则来实现项目,还需和其他因素一起考虑。
设计原则
⑴单一职责原则:一个类只负责一个功能领域中的相应职责,即能够引起类发生该生改变的原因只有一个。
⑵开闭原则:软件实体应该对扩展开放,而对修改关闭。即不要修改原有的代码,而是使用新的接口,扩展类来进行功能的扩充。
⑶里式替换原则:所有引入基类对象的地方能够透明地使用其子类的对象,即通过多态的特性,定义一个父类接口,类,在具体运行过程中,会调用子类的方法。
⑷迪米特原则:一个软件实体应该尽可能少地于其他实体发生相互作用,
尽量实现解耦。
⑸依赖倒转原则:抽象不应该依赖于细节,细节应该依赖于抽象,即针对接口编程,而不是针对现实编程。
⑹接口隔离原则:使用多个专门的接口,而不使用单一的总的接口,即客户端不应该依赖那些它不需要的接口。
⑺合成复用原则:尽量使用对象的组合,而不是继承来达到复用的目的,即使用对象的引用,而不是使用继承来不断的扩充软件实体。
设计模式
- 单例模式
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
- 原型模式
- 建造者模式
- 适配器模式
- 桥接模式
- 组合模式
- 装饰模式
- 外观模式
- 享元模式
- 代理模式
- 职责链模式
- 命令模式
- 备忘录模式
- 观察者模式
- 组合模式
- …...
在后面的具体设计模式更新中,会相应的定期更新这些设计模式的实现链接,方便大家阅读。
内容参考《设计模式艺术之道》,著刘伟 , 十分感谢此书作者为我们提供的精彩内容