装饰者模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰者模式相关的知识,希望对你有一定的参考价值。

装饰者模式

动态的将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。

  • 装饰者和被装饰者具有相同的超类
  • 可以用一个或多个装饰者包装同一个对象
  • 装饰者和被装饰对象有相同的超类型,所以在任何需要原始对象(被包装的)的场合,
    可以用装饰过的对象代替它
  • 装饰者可以在所委托被装饰者的行为之前与 / 或之后,加上自己的行为,以达到特定的目的
  • 对象可以在任何时候被装饰,所以可以在运行时动态地、不限量地用你喜欢的装饰者来装饰
    对象

装饰者模式遵循设计原则:对扩展开放,对修改关闭

装饰者模式可以避免因继承所造成的子类爆炸(虽然依旧很多子类)。因为一个被装饰者可以用多个装饰者修饰。同样的改变可以由一个装饰者替代,而不是每个子类重写。当有新的改变时,所做的是继承父类新建一个装饰类来适应这部分改变。装饰者模式的重点是扩展而不是改变。

eg:咖啡、香草咖啡、雪顶咖啡和打折后的咖啡

如果用装饰者模式实现需要咖啡类、香草类、雪顶类、打折类。咖啡类被其他三个类修饰,可以得到8种咖啡:咖啡、香草咖啡、雪顶咖啡、特价咖啡、香草特价、雪顶特价啊、香草雪顶、香草雪顶特价

如果用继承的话就需要8个类了。因为继承面对改变需要重写。

缺点:有大量的小类。当装饰数量增多时会影响效率。

以上是关于装饰者模式的主要内容,如果未能解决你的问题,请参考以下文章

装饰者模式

java常用设计模式装饰者模式

Head First设计模式之装饰者模式(Decorator Pattern)

Head First设计模式之装饰者模式(Decorator Pattern)

Head First设计模式之装饰者模式(Decorator Pattern)

代理模式、装饰者模式