一、模式的起源与诞生
-
模式起源于建筑业而非软件业
-
Christopher Alexander博士 “模式(Pattern)之父”
- 《A Pattern Language: Towns, Buildings, Construction》总结出人们对于舒适住宅和城市环境存在一些共同的认同规律,将这些认同规律归纳为253个建筑和城市规划模式。
- 对每一种模式从3个方面进行描述,并给出了从用户需求分析到建筑环境结构设计直至经典实例的过程模型。
-
Context(模式可适用的前提条件)
-
Theme或Problem(在特定条件下要解决的目标问题)
-
Solution(对目标问题求解过程中各种物理关系的记述)
-
-
关于“模式”的经典定义:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的解决方案,无需再重复相同的工作。 来源于Christopher Alexander的另一部经典著作《建筑的永恒之道》
-
换言之,“模式是在特定环境中解决问题的一种方案”【A pattern is a solution to a problem in a context】。
二、软件设计模式的演变
1. 建筑模式========>软件模式
-
软件模式(Software Patterns)是将模式的一般概念应用于软件开发领域,即软件开发的总体指导思路或参照样板。
-
软件模式并非仅限于设计模式,还包括架构模式、分析模式和过程模式等。
-
软件模式由四部分构成,包括问题描述【待解决的问题是什么】、前提条件【在何种环境或约束条件下使用】、解法【如何解决】和效果【有哪些优缺点】。
- GoF四人组,最早将模式的思想引入软件工程方法学。
-
2. 1994年,“四人组“(Gang of Four,GoF,分别是Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides)归纳发表了23种在软件开发中使用频率较高的设计模式,旨在用模式来统一沟通面向对象方法在分析、设计和实现间的鸿沟。
-
在软件模式中,设计模式是研究最为深入的分支,设计模式用于在特定的条件下为一些重复出现的软件设计问题提供合理的、有效的解决方案。
-
1995年,GoF将收集和整理好的23种设计模式汇编成Design Patterns: Elements of Reusable Object-Oriented Software《设计模式:可复用面向对象软件的基础》。
-
三、设计模式是什么
-
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。
-
狭义的设计模式是指GoF在《设计模式:可复用面向对象软件的基础》一书中所介绍的23种经典设计模式,不过设计模式并不仅仅只有这23种,随着软件开发技术的发展,越来越多的新模式不断诞生并得以应用。
四、设计模式的分类
-
根据它们的用途,设计模式可分为创建型(Creational),结构型(Structural)和行为型(Behavioral)三种:
-
创建型模式主要用于描述如何创建对象
-
单例模式(Singleton)
- 简单工厂模式(Simple Factory) ------GOF中未包含
-
工厂方法模式(Factory Method)
-
抽象工厂模式(Abstract Factory)
-
建造者模式(Builder)
-
原型模式(Prototype)
-
-
结构型模式主要用于描述如何实现类或对象的组合
-
适配器模式(Adapter)
-
桥接模式(Bridge)
-
组合模式(Composite)
-
装饰模式(Decorator)
-
外观模式(Facade)
-
享元模式(Flyweight)
-
代理模式(Proxy)
-
-
行为型模式主要用于描述类或对象怎样交互以及怎样分配职责
-
职责链模式(Chain of Responsibility)
-
命令模式(Command)
-
解释器模式(Interpreter)
-
迭代器模式(Iterator)
-
中介者模式(Mediator)
-
备忘录模式(Memento)
-
观察者模式(Observer)
-
状态模式(State)
-
策略模式(Strategy)
-
模板方法模式(Template Method)
-
访问者模式(Visitor)
-
-
- 根据某个模式主要是用于处理类之间的关系还是对象之间的关系,设计模式还可以分为两种:
-
类模式:处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,是属于静态的。
-
对象模式:处理对象间的关系,这些关系在运行时刻变化,更具动态性
-