# 分类


## ***模式分类***

### ***从目的来看***

1. ***创建型模式***
   - *将对象的部分创建工作延后到子类或者其他对象，从而应对需求变化为对象创建时带来的冲击*
2. ***结构型模式***
   - *通过类继承或者对象组合获得灵活的结构，从而应对需求变化为对象的结构带来冲击*
3. ***行为型模式***
   - *通过类继承或者对象组合来划分类与对象间的职责，从而应对需求变化为多个交互的对象带来的冲击*

### ***从范围来看***

1. ***类模式处理类与子类的静态关系***
2. ***对象模式处理对象间的动态关系***

### ***从封装变化角度来看***

1. ***组件协作***
   - *Template Method*
   - *Observer / Event*
   - *Strategy*
2. ***单一职责***
   - *Decorator*
   - *Bridge*
3. ***对象创建***
   - *Factory Method*
   - *Abstract Factory*
   - *Prototype*
   - *Builder*
4. ***对象性能***
   - *Singleton*
   - *Flyweight*
5. ***接口隔离***
   - *Façade*
   - *Proxy*
   - *Mediator*
   - *Adapter*
6. ***状态变化***
   - *Memento*
   - *State*
7. ***数据结构***
   - *Composite*
   - *Iterator*
   - *Chain of Resposibility*
8. ***行为变化***
   - *Command*
   - *Visitor*
9. ***领域问题***
   - *Interpreter*

## ***重构获得模式***

### ***重构获得模式***

1. ***怎么去看待设计模式***
   - *面向对象模式是 "好的面向对象设计"，所谓好的面向对象设计就是指那些可以满足 **应对变化**，提高复用性*
   - *现代软件设计的特征就是 **需求的频繁变化**，所以设计模式重点在于 **寻求变化点**，然后在变化点应用设计模式，从而来更好的应对需求的变化*
   - ***所以说，什么时候，什么地点应用设计模式比理解设计模式结构本身更为重要!!!***
   - *同时，设计模式的应用不宜先入为主，一上来就是用设计模式，这是最大的错误，而且也没有一步到位的设计模式让你去使用*
   - ***重构与模式 很重要!!! 还有脚踏实地!!!***

### ***重构关键方法***

1. *静态 -> 动态*
2. *早绑定 -> 晚绑定*
3. *继承 -> 组合*
4. *编译时依赖 -> 运行时依赖*
5. *紧耦合 -> 松耦合*

