诞生与发展
模式这个概念在很早的时候就已经存在了,并且有很多的模式在现有的软件系统设计中都已经出现过了。模式最早起源于建筑业,模式之父Christopher Alexander博士用了很长的时间来做住宅和周边环境的资料收集工作,发现人们对于舒适住宅和城市环境存在一些共同的认知规律。这些规律不像物理学和数学规律那样明显,或者一定有确定的结论,但是通过统计这些规律,可以得到一些场景下对应问题的较优解决方案。
上个世纪末软件工程界开始关注Alexander博士的研究,当时行业正处于快速发展的阶段,就像工业界很多模具与生产流水线的出现一样,大家也希望找到软件开发上的一些可以通用化、模板化的东西,来帮助提高开发效率。于是设计模式应运而生。简单地来说设计模式就是大家在写代码的过程中总结出来的一些套路,可以在对面一些问题时,直接用这些套路来解决,而且这些套路经过了大家的实践检验,被公认为是非常棒的套路。
自20世纪90年代软件设计模式概念提出以来,一直受到广大软件开发者的青睐。在国外,对设计模式的研究工作进展十分迅速,他们总是能够不断的总结出新的软件设计模式,而且很多的软件设计开发工具与环境都对他们的开发工作进行了必要的支持,有些软件设计模式的研究者还能够让设计模式运用形式化的表现模式由计算机自动生成需要的代码。
设计模式的定义
设计模式(Design Pattern)是一套被反复使用、多数人知晓、经过分类的、代码设计经验的总结。
使用目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
设计模式的分类
软件设计模式共分为了3类23种,每种设计模式都有其比较合适的应用场景。但是大多数设计模式并不能得到发扬广大,得不到充分的利用。常
1.创建型模式
创建型模式,就是创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。关注的是对象的创建,创建型模式将创建对象的过程进行了抽象,也可以理解为将创建对象的过程进行了封装,作为客户程序仅仅需要去使用对象,而不再关系创建对象过程中的逻辑。
- 简单工厂模式(Simple Factory)
- 工厂方法模式(Factory Method)
- 抽象工厂模式(Abstract Factory)
- 创建者模式(Builder)
- 原型模式(Prototype)
- 单例模式(Singleton)
2.结构型模式
结构型模式是为解决怎样组装现有的类,设计它们的交互方式,从而达到实现一定的功能目的。结构型模式包容了对很多问题的解决。例如:扩展性(外观、组成、代理、装饰)、封装(适配器、桥接)。在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点,因为如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等。
- 外观模式/门面模式(Facade门面模式)
- 适配器模式(Adapter)
- 代理模式(Proxy)
- 装饰模式(Decorator)
- 桥梁模式/桥接模式(Bridge)
- 组合模式(Composite)
- 享元模式(Flyweight)
3.行为型模式
行为型模式涉及到算法和对象间职责的分配,行为模式描述了对象和类的模式,以及它们之间的通信模式,行为模式刻划了在程序运行时难以跟踪的复杂的控制流可分为行为类模式和行为对象模式。1. 行为类模式使用继承机制在类间分派行为。2. 行为对象模式使用对象聚合来分配行为。一些行为对象模式描述了一组对等的对象怎样相互协作以完成其中任何一个对象都无法单独完成的任务。
- 模板方法模式(Template Method)
- 观察者模式(Observer)
- 状态模式(State)
- 策略模式(Strategy)
- 职责链模式(Chain of Responsibility)
- 命令模式(Command)
- 访问者模式(Visitor)
- 调停者模式(Mediator)
- 备忘录模式(Memento)
- 迭代器模式(Iterator)
- 解释器模式(Interpreter)
作用
软件设计模式的存在能够极大限度的帮助设计者用最快最好的方式来完成相关的软件程序设计。而面对特殊的问题的时候,在已有的软件设计模式中也可以十分方便的找到合适的软件模式进行相关的程序设计,尤其是在面对软件设计人员还不熟悉的新问题的时候。
参考
https://juejin.im/post/5c8756e6e51d456cda2e7ff1
https://blog.csdn.net/u012869196/article/details/73616182