1.1 模式要素
- 模式名是描述一个设计问题、其解决方案和结果的简单标识,只用一两个词描述。对模式命名可以增加我们的设计术语。这样一来就可以在一个更高的抽象层次上完成设计。有了模式术语表,我们就可以与同事讨论这些模式,在我们的文档中使用这些模式来说明有关问题,甚至自己基于这些模式来考虑问题。这使得讨论设计更为简单,与其他人交流模式及其相关问题也更容易。寻找好的模式名一直是建立模式表时最困难的部分之一。
- 问题描述了何时应用这种模式。它解释了问题及其内容。这一部分可以描述特定的设计问题,例如如何将算法表示为对象。还可以描述可能导致不灵活设计问题的类或对象结构。有时问题中还包含适用于应用这种模式必须满足的一组条件。
- 解决方案描述了构成设计的元素,以及元素之间的关系、元素的职责和协作。解决方案不会描述一个具体的设计或实现,因为模式类似于一个模板,可以应用于许多不同的情况。实际上,模式提供了一个设计问题的抽象描述,并提供了解决这个问题的元素(对我们来说,也就是类和对象)的一般组织。
- 结果描述应用这种模式的结果和开销。尽管通常结果并不明确指出,但是在描述设计决策时,结果对于评价各种设计选择以及理解应用模式的代价和好处是至关重要的。对于软件来说,模式的结果通常与空间和时间开销有关。可能还与语言和实现问题有关。由于重用通常是面向对象设计中的一个重要因素,因此模式的结果会包含应用该模式对系统灵活性、可扩展性或可移植性的影响。明确地列出结果有助于理解模式并对它们做出评价。
1.2 面向对象设计原则
- 单一职责原则(Single Responsibility Principle,SRP)
- 开闭原则(Open Close Principle)
- 里氏替换原则(Liskov Substitution Principle)
- 依赖倒转原则(Dependence Inversion Principle)
- 接口隔离原则(Interface Segregation Principle)
- 迪米特法则,又称最少知道原则(Demeter Principle)
- 合成复用原则(Composite Reuse Principle)
1.3 设计模式
1 创建型模式
- 抽象工厂模式(Abstract Factory)
- 生成器模式(Builder)
- 工厂方法模式(Factory Method)
- 原型模式(Prototype)
- 单例模式(Singleton)
2 结构型模式
- 适配器模式(Adapter)
- 桥接模式(Bridge)
- 组合模式(Composite)
- 装饰器模式(Decorator)
- 外观模式(Facade)
- 享元模式(Flyweight)
- 代理模式(Proxy)
3 行为型模式
- 职责链模式(Chain of Responsibility)
- 命令模式(Command)
- 解释器模式(Interpreter)
- 迭代器模式(Iterator)
- 中介者模式(Mediator)
- 备忘录模式(Memento)
- 观察者模式(Observer)
- 状态模式(State)
- 策略模式(Strategy)
- 模板方法模式(Template Method)
- 访问者模式(Visitor)