Design Patterns
Design Principles
一些导致重新设计的**问题,以及解决它们的设计模式**。
- ~~通过显式地指定一个类来创建对象。~~会导致依赖实现而不是依赖接口。Abstract Factory, Factory Method, Prototype.
- ~~对特殊操作的依赖。~~会将完成该请求的方式写死。Chain of Responsibility, Command.
- ~~对硬件和软件平台的依赖。~~会导致很难移植。Abstract Factory, Bridge.
- ~~对对象表示或实现的依赖。~~会导致对象变化时对象的客户也对相应变化。Builder, Iterator, Strategy, Template Method, Visitor.
- ~~紧耦合。~~会导致类难以独立地被复用。Abstract Factory, Command, Facade, Mediator, Observe, Chain of Responsibility.
- ~~通过生成子类来扩充功能。~~会导致类爆炸,尽量用组合或者委托技术,而非集成。Bridge, Chain of Responsibility, Composite, Decorator, Observer, Strategy.
- ~~不能方便地对类进行修改。~~比如说是没有源码的第三方库。Adapter, Decorator, Visitor.
不同设计模式支持的独立改变,不会导致重新设计
设计目的 | 设计模式 | 可独立改变的方面 |
---|---|---|
创建 | Abstract Factory | 产品对象家族 |
Builder | 如何创建一个组合对象 | |
Factory Method | 被实例化的子类 | |
Prototype | 被实例化的类 | |
Singleton | 一个类的唯一实例 | |
结构 | Adapter | 对象的接口 |
Bridge | 对象的实现 | |
Composite | 一个对象的结构和组成 | |
Decorator | 对象的职责,不生成子类 | |
Facade | 一个子系统的接口 | |
FlyWeight | 对象的存储开销 | |
Proxy | 如何访问一个对象:该对象的位置 | |
行为 | Chain of Responsibility | 满足一个请求的对象 |
Command | 何时、怎样满足一个请求 | |
Interpreter | 一个语言的文法及解释 | |
Iterator | 如何遍历、访问一个聚合的各元素 | |
Mediator | 对象间怎样交互、和谁交互 | |
Memento | 一个对象中哪些私有信息存放在该对象之外,以及在什么时候进行存储 | |
Observer | 多个对象依赖于另外一个对象,而这些对象又如何保持一致 | |
State | 对象的状态 | |
Strategy | 算法 | |
Template Method | 算法中的某些步骤 | |
Visitor | 某些可作用于一个(组)对象上的操作,但不修改这些对象的类 |
Details
Creational Patterns
Abstract Factory
Builder
Factory Method (Class)
Prototype
Singleton
Structural Patterns
Behavioral Patterns
Chain of Responsibility
Command
Interpreter (Class)
Iterator
Mediator
Memento
Observer
State
Strategy
Template Method (Class)
Visitor
[1] 设计模式:可复用面向对象软件的基础