结构型模式(一)

设计模式精要

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等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值