1、适配器(Adapter)
将一个类接口转换成客户希望的另外一个接口。可以通过继承客户接口和适配层接口实现,也可通过组合方式。
继承的方式能够改写基类实现,但是无法适配子类的接口。组合的方式需要显示调用,没有默认实现。但是可以同时适配多个基类。
一般在设计后实施,已经存在了Target和Adaptee了
2、桥接模式(Bridge)
将抽象部分和实现部分分离,使得他们独立的变化。一般在设计前实施
3、组合(Composite)
适用性:你想表示对象的部分-整体层次接口
用户忽略组合对象和单个对象的不同。是一个递归的过程。
用户调用operator时,会一级一级调用各自的operator,对于用户来说,每个都是Component对象类型。Composite则又包含了Leaf对象或Composite对象。
4、装饰(Decorator)
动态的给一个对象添加额外的职责
classA* pTestA = new ClassA(new ClassB(new ClassC);
pTestA->operator();
此时会递归调用B的operator,在B的operator中科院加一些状态如AddState,再调用C的,C再加一些行为如AddBehavior。如此添加职责。
5、外观(Facade)
将各个子系统提供一个高层接口,方便客户类使用,各个子系统功能多而复杂。该外观类只负责对子系统接口的访问。子系统接口不能访问外观接口。
6、享元(flyweight)
通过享元技术可支持大量细粒度的对象
如word中,如果对每个字符都出一个对象实例(对象包含位置,颜色等属性),则对象数量庞大。解决方法
6.1 、a,b,c,d这些类型对象共享
6.2、颜色字体不会有太多组合,由布局器来维护管理
提取公有部分共享,不同部分使用单独类管理
7、代理(Proxy)
为其它对象提供一种代理,以控制对这个对象的访问。
适用性:因此对象接口。对象开销大,由代理延迟开销或决定是否开销。