6、adapter 适配器
别名wrapper ,将一些接口不统一的类包装成统一的接口
target req() adaptee other_req()
|_______________|
|
adapter req()->other_req()
target的req()是对外的接口,adptee的other_req()是待匹配的接口
优缺点:
对外接口更加统一
子类重定义adaptee的行为比较困难,需要adapter指向adaptee的子类
7、birdge 桥接
在抽象类里保存一个imp类的指针,在调用抽象类方法时,实际调用imp类的方法
abstraction-opt()
opt() {imp->opt()}------------------------imp-opt()
优缺点:
跟抽象工厂有一些区别,桥接能使接口和实现不是继承的关系
提高可扩充性
8、composite 组合
将功能类似的类整合起来,保存到composite类里,可遍历调用
component <----
| |
|------| |
leaf compsite -| 含有component的指针
优缺点:
简化代码,用户可以统一使用compsite无需关心leaf的个数
将component暴露给用户,leaf和compsite可重新定义而不影响用户
9、decorator 装饰器
别名wrapper,子类继承父类的接口,并保存父类的指针,负责对父类操作进行装饰
component
|
|-----------|
concrete comonent decorator
|
|--------|
boder dec scroll dec decotor::draw(); drawScroll();
例:
concrete comonent * p = new concrete comonent; // 原始的零件
concrete comonent * p1 = new border_dec(p);// 装饰后的零件
比较:
adaptor的包裹是统一接口,decorator的包裹是添加装饰,接口本来就是一致的。
compsite不改变原来leaf的类,decorator对原来的零件做了一些改变
优缺点:
比静态继承更灵活,如果又5种零件,2种装饰,静态继承需要2*5个类,装饰器需要2+5个类
用例:
MFC等