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

Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy

Behavioral Patterns

Chain of Responsibility
Command
Interpreter (Class)
Iterator
Mediator
Memento
Observer
State
Strategy
Template Method (Class)
Visitor

[1] 设计模式:可复用面向对象软件的基础