设计模式的分类

什么是设计模式,通用的解决方案去解决设计中反复出现的问题。

剖析方法

名称
问题/动机
解决方案
后果和权衡取舍
哪些对我们很重要?

面向对象分析(OOA)

把(业务)领域的问题设计成(域)对象

- 解决功能性挑战
- 描述系统的功能
- 提供一个可以遵循的实施方案

面向对象设计(OOD)

把(业务)领域的问题被看待成(实现)对象

- 解决实施挑战
- 系统如何实现OOA

怎样才能演变成OOD

确定共同特征,创造,结构,行为以及三者相互结合

设计模式(设计重用)

- 通用蓝图(微架构)
- 语言和实现独立
- 两大分类

GoF:四人帮(Gamma,Helm,Johnson,Vlissides,1995)

面向模式的软件架构 (Buschmann, etal.; Wiley, 1996)

设计模式分类

根据”用途“分类

Creational(建造)关注对象和类的创建过程
Structural(结构)类和对象的组成
Behavioral(动作)描述类、对象的交互特点和职责

Creational(建造)关注对象和类的创建过程
Factory Method(工厂方法模式,类间)

Abstract Factory(抽象工厂,对象间)
Builder(建造者模式)
Prototype(原型模式)
Singleton(单例模式)

Structural(结构)类和对象的组成
Adaptor - class(适配器模式,类间)

Adaptor-object(适配器模式,对象间)
Bridge(桥接模式)
Composite(组合模式)
Decorator(装饰模式)
Facade(门面模式)
Flyweight(享元模式)
Proxy(代理模式)

Behavioral(动作)描述类、对象的交互特点和职责
Interpreter(解释器模式)
Template Method(模板方法模式)

Chain of responsibility(责任链模式)
Command(命令行模式)
Iterator(迭代器模式)
Mediator(中介模式)
Memento(备忘录模式)
Observer(观察者模式)
State(状态模式)
Strategy(策略模式)
Visitor(访问者模式)

基于“范围“分类

确定模式是适用于类还是对象,两类

class scope

- 类和子类之间的关系
- 在运行时静态定义

object scope

- 对象关系(什么类型?)
- 可以在运行时进行操作(什么样的结果?)

Creational class
defers object creation to sub-classes (factory method)
将对象的创建交由子类去做(工厂模式)

Creational object
defers object creation to other objects (abstract factory)
将对象的创建交由其它的对象去做(抽象工厂)

Structural class 
inheritance to compose classes (adapter)
通过继承组合多个类(适配器)

Structural object
deals with object assembly (adapter)
处理对象间的交互(适配器)

Behavioral class
uses inheritance to describe flow of control, algorithms (template)
使用继承的方式来描述控制流程,算法(模板)

Behavioral object
group of objects working together to carry out a task (iterator)
一组对象共同完成一个任务(迭代)

Singleton(单例)

确保一个类只有一个实例,并提供一个全局的引用/指针(point)以便访问这个实例。

Adapter(适配器)

把一个类的接口转换成另一个接口,让接口本不兼容的类也能一起工作。

要点:一般通过多重继承来实现,对于不支持多重继承的通过对象聚合的方式实现。

Bridge(桥接)

将抽象从其实现中分离出来,因此两者可以独立地变化。使用桥接模式将抽象和实现放在两个不同的层次结构中。

适配器与桥接模式两者的差异

适配器 - 解决两个现有接口之间的不兼容问题 - 两个接口是独立的,可以单独发展 - 耦合是无法预料的 - 在设计完成后调整组件。

桥接 - 连接一个抽象的多个实现, 抽象和实现之间的耦合是已知的。