简要(真的很简要)介绍一些设计模式的基本原则与设计模式的分类。

设计原则

设计模式的作用

应对变化,提高复用。

实现层

如何用代码实现:

  • 封装:隐藏内部实现

  • 继承:复用现有代码

  • 多态:改写对象行为

原则

一些基本思想:

  • 针对接口编程,而不是针对实现编程

  • 优先使用对象组合,而不是类继承

  • 封装变化点

  • 高内聚,低耦合

高层/主模块:抽象的部分
底层/次要模块:细节实现部分

  1. 单一职责原则 SRP
    一个类应该仅有一个引起变化的原因
    e.g. File 和 FileInfo

  2. 开放封闭原则 OCP
    对扩展开放,对更改封闭

  3. Liskov 替换原则 LSP
    子类必须能够替换它们的基类( is a)

  4. 依赖倒置原则 DIP
    高层模块不应该依赖于低层模块,二者都应该依赖于抽象
    抽象不应该依赖于实现细节,实现细节应该依赖于抽象

  5. 接口隔离原则 ISP
    不应该强迫客户程序依赖于它们不用的方法


设计模式分类

按照目的分类

  • 创建型 模式
    创建型 模式 要解决的问题: new 的问题;
    new 的问题: 实现依赖,不能应对“具体实例化类型”的变化。

  • 结构型 模式
    处理类与对象间的组合(对象与对象之间的耦合关系)

  • 行为型 模式
    类与对象交互中的职责分配(对象与行为操作之间的耦合关系)
    行为请求者 与 行为实现者

按照范围分类

  • 类模式
    处理类与子类的静态关系

  • 对象模式
    处理对象间的动态关系


具体分类

  1. 组件协作模式
    1 模板方法 Template Method
    2 观察者 Observer / Event
    3 策略模式 Strategy

  2. 单一职责模式
    1 装饰模式 Decorator
    2 桥模式 Bridge

  3. 对象创建模式
    1 工厂方法 Factory Method
    2 抽象工厂 Abstract Factory
    3 原型模式 Prototype
    4 构建器 Builder

  4. 对象性能模式
    1 单例模式 Singleton
    2 享元模式 Flyweight

  5. 接口隔离模式
    1 外观模式 Facade
    2 代理模式 Proxy
    3 适配器 Adapter
    4 中介者 Mediator

  6. 状态变化模式
    1 状态模式 State
    2 备忘录 Memento

  7. 数据结构模式
    1 组合模式 Composite
    2 迭代器 Iterator
    3 职责链 Chain of Resposibility

  8. 行为变化模式
    1 访问器 Visitor
    2 命令 Command

  9. 领域问题
    1 解析器 Interpreter