## 1 简介

软件设计模式（Software Design Pattern），又称设计模式，是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题，以及该问题的解决方案。也就是说，它是解决特定问题的一系列套路，是前辈们的代码设计经验的总结，具有一定的普遍性，可以反复使用。

## 2 分类

- **创建型模式**

  描述“**怎样创建对象**”，它的主要特点是”将对象的创建与使用分离“，包括以下  5 种：

  * 单例
  * 原型
  * 工厂方法
  * 抽象工厂
  * 建造者

- **结构型模式**

  描述**如何将类或对象按某种布局组成更大的结构**，包括以下 7 种：

  * 代理
  * 适配器
  * 桥接
  * 装饰
  * 外观
  * 享元
  * 组合

- **行为型模式**

  描述**类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务，以及怎样分配职责**，包括以下 11 种：

  * 模板方法
  * 策略
  * 命令
  * 职责链
  * 状态
  * 观察者
  * 中介者
  * 迭代器
  * 访问者
  * 备忘录
  * 解释器