一、创建类模式:对象的创建和管理职责 - 在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。
1. 工厂方法模式 - 定义一个用于创建产品的接口,由子类决定生产什么产品。
2. 抽象工厂模式 - 是工厂方法模式的升级版本,提供一个创建产品族(如抢和子弹/ 电脑和键盘等)的接口,其每个子类可以生产一系列相关的产品。
工厂方法是由子类自行决定实例化那个类,而抽象工厂是自己决定实例化哪个类。至于是组合还是继承还是实现接口都无所谓。根本区别在于是自己实例化还是子类实例化。
工厂方法模式的一个工厂创建一个具体产品。而抽象工厂模式的一个工厂可以创建属于一类类型的多种具体产品。
3. 建造者模式 - Builder ---将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象
4. 单例模式 - 一个process中只有一个实例存在,要到多线程也要拿到唯一的实例
5. 原型模式 - 有一个原型,别人去复制它;这样就有了多个实例存在。如--java clone() --c++的复制和拷贝构造函数 ---涉及有深拷贝和浅拷贝
二、结构类模式:通过组合类或对象产生更大结构以适应更高层次的逻辑需求
6. 适配器模式 - 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作; 需要加入一个兼容的类,处理接口的转化。
7. 桥梁模式 - 解决不破坏封装的情况下,如何抽取出它的抽象部分和实现部分,能让二者独立的变化。
两个类之间的关系分为两种,一种是强关联一种是弱关联,强关联是在编译时期就已经确定的,无法在运行时期动态的改变的关联;弱关联是可以动态地确定并且可以在运行时期动态改变的关联。---- 所以继承是强关联而聚合是弱关联
8. 组合模式 - 将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。--- window的文件夹模式 -- android wms的windowstate模式
9. 装饰模式 - 动态的给对象增加一些职责,即增加其额外的功能。-- 将原实现类塞到装饰类中,可以在装饰类中添加新功能,接口可以调用原实现类实现,也可以添加新功能的逻辑。
10. 门面模式 - 为复杂的子系统提供统一的访问界面,定义高层接口,避免外部模块深入到子系统内部,实现解耦合。
11. 享元模式 - 运用共享技术来有效地支持大量细粒度对象的复用--- 建立一个池子 -池技术的重要实现方式
12. 代理模式 - 为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。
三、行为类模式:描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责
13. 责任链模式 - 把请求从链中的一个对象传到下一个对象,直到请求被响应为止。通过这种方式去除对象之间的耦合。-- 请假模式 --层层审批
14. 命令模式 - 将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开
15. 解释器模式 - 提供如何定义语言的文法,以及对语言句子的解释方法,即解释器。-- 正则表达式和编译器等
16. 迭代器模式 - 提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。 --- vector 的Iterator
17. 中介者模式 - 使用一个中介对象来封装一系列其他对象的交互行为,使各对象之间不再显示引用,使其耦合松散,可扩展。-- 举例联合国,通过联合国沟通,可以国与国不直接联系。
18. 备忘录模式 - 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存着这个状态。这样以后就可将该对象恢复到原先保存的状态
19. 观察者模式 - 又叫发布-订阅模式(Publish/Subscribe),定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。-- notifyObserver
20. 状态模式 - 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 --- 比如电梯 -- 开门 关门 运行 停
21. 策略模式 - 定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户。
22. 模板方法模式 - 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 -- 抽象方法 abstract *** --- 子类实现
23. 访问者模式 - 在不改变集合元素的前提下,为一个集合中的每个元素提供多种访问方式,即每个元素有多个访问者对象访问。 --visitor --- 主要将数据结构与数据操作分离。