我在网上查找有关装饰器模式的资料时,发现所有的材料都说装饰器模式“可以动态地给对象添加额外的职责,就象在墙上刷油漆。”我有些不解:所谓的“动态”是什么意思,用继承难道就不“动态”了?
    还有,在谈到装饰器模式与继承相比的优点时,人们总是说它:
    1、可以在不改变原有对象的情况下为对象添加更多动能 
    2、可以保证了和被装饰对象的接口不变
    3、灵活地扩充新功能
    4、多个装饰器可以根据不同的需要,组合使用
    我还是不解,继承不也是“可以在不改变原有对象的情况下为对象添加更多动能”吗?
    还有,“可以保证了和被装饰对象的接口不变”是什么意思?
    装饰器的“灵活”性又体现在哪里?
    总之,我就是不太明白装饰器模式与继承相比优势到底在哪里?
                
    

解决方案 »

  1.   

    继承是编码级的
    你把你写好的类给别人用
    或者以后自己复用
    所有的继承则都是死的
    而使用装饰则是在不改变任何代码的前提下改变行为模式
      

  2.   

    已有专家认为继承不是最好的复用模式,因为有很多父类中的方法,属性并不是子类所需要的,而是在继承中被强制拥有的。所以为了避免这种情况,提倡把特定的功能封装到装饰器中,在自由组合使用,从而避免继承的先天问题
      

  3.   

    因为继承是编码时绑定,完全依赖关系
    而组合是动态的,更加灵活