11.Decorator(结构型模式)

来源:互联网 发布:体育与科学探索软件 编辑:程序博客网 时间:2024/05/17 06:22

【起源】

         不改变原始类,动态的给某个对象增加一种或多种功能。

         比如:公交车有运送功能,想给它添加“无人售票”或“自动报站”功能;不同路线的公交车,添加的功能是这两个功能的排列组合;其实是在原有“运送功能”的基础上,把“额外功能”添加上;

         本质:重写对象行为,添加额外功能。

 

【动机】

         动态的给一个对象增加一些额外职责。

 

【核心】

         1.给一个类增加功能,可以通过继承重写该类的方法,在原有方法的基础上,加上新的方法;但是带来一个问题,新加的“额外功能”个数不一定,需要根据排列组合的所有 n 种情况,逐一继承;

         2.假设这个类有 m 个子类,每个子类都需要添加额外功能,总共要通过继承新增 m*n 个类;

         3.工作量大,效率低,需要改进;

         4.从1入手,用“单个额外功能叠加”来代替“枚举额外功能的组合”。通过类继承实现动态添加功能(一个额外功能是一个具体的Decorator);

         5.从2入手,把修改“多个子类行为的代码”封装到“一个将子类作为参数的类中”。通过对象组合实现动态选择对象(因为子类的接口都相同);

         6.由4和5得出Decorator模式,Decorator类就是同时具有4和5的功能的类

         理解:特殊的Adapter类。

                  特殊体现在两点(1.Adapter的出口与入口一致;2.被适配对象可灵活选择,被父类封装)

                  因为是Adapter,所以要用对象组合;

                  因为出口与入口一致,所以直接用继承;

         本质:使用了单个对象组合,组合对象的抽象,类继承

 

 

【代码实例】

 

【模型图】

 

原创粉丝点击