码迷,mamicode.com
首页 > 其他好文 > 详细

装饰者模式

时间:2016-02-05 11:55:16      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

装饰者模式

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

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

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

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

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

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

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

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

装饰者模式

标签:

原文地址:http://www.cnblogs.com/loststart/p/5181806.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!