## **设计模式分类**
软件设计模式根据目的来分可以分为三大类、总共23种设计模式,实在是太多了,估计大部分得人也记不住更别说用了,以下整理了每个大类的一些常用的设计模式。
## **一. 创建型模式**
用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”
* **单例模式**(Singleton)
对象最多只能创建一个实例
* **工厂方法模式**(Factory Method)
创建父类公共接口(定义创建方式),而子类则负责生成具体的对象。
* **抽象工厂模式**(AbstractFactory)
提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品
* **原型模式**(Prototype)
将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例
* **建造者模式**(Builder)
将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象
## **二. 结构型模式**
用于描述如何将类或对象按某种布局组成更大的结构
* **适配器模式**(Adapter)
将一个类的接口转换成客户希望的另外一个接口,主要用于解决接口兼容性问题。
* **装饰器模式**(Decorator)
动态的给对象增加一些职责,扩展对象的功能。
* **代理模式**(Proxy)
提供一种间接访问对象的方法,主要用于解决一些不想直接访问对象的场景。
* **外观模式**(Facade)
为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问
## **三. 行为型模式**
用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责
* **策略模式**(Strategy)
定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户
* **模板方法模式**(TemplateMethod)
定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤
* **观察者模式**(Observer)
多个对象间存在一对多关系,当一个对象发生改变时,把这种改变通知给其他多个对象,从而影响其他对象的行为
## **设计模式的六大原则**
* **单一职责原则**:实现类要职责单一
* **里氏替换原则**:不要破坏继承体系,子类可以扩展父类的功能,但不能改变原有父类的功能
* **依赖倒置原则**:面向接口编程,而不依赖具体的实现
* **接口隔离原则**:设计接口要职责单一
* **迪米特原则**:降低耦合
* **开闭原则**:开放扩展,关闭修改