设计模式之装饰者模式
2016-03-14 13:14
183 查看
首先提出问题:如何计算在星巴克购买咖啡时,加入各种调料的总费用。
第一种方案如下:
这种方案在一定程度上可以解决类爆炸的问题。但是有引来了新的问题,我们可能会修改调料的价格,或者有了新的调料,在或者某些子类中不包含某些调料。这都会导致我们修改原代码。这与我们的设计原则不符。
我们在提出一条设计原则:
设计原则:类应该对扩展开放,对修改关闭。
第二个方案:
以DarkRoast为例,顾客想要摩卡,就建立一个摩卡对象,并用它将DarkRoast对象包起来。顾客想要奶泡,就建立奶泡对象将摩卡包起来。如图:
然后结算的时候,就可以通过外围的装饰者的cost结算,奶泡的cost会先委托它装饰的对象摩卡计算,最后加上奶泡的价格。
我们可以画出类图:
对应上面的类图,我们可以画出装饰者模式的类图:
这就是装饰者模式:
装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
第一种方案如下:
这种方案在一定程度上可以解决类爆炸的问题。但是有引来了新的问题,我们可能会修改调料的价格,或者有了新的调料,在或者某些子类中不包含某些调料。这都会导致我们修改原代码。这与我们的设计原则不符。
我们在提出一条设计原则:
设计原则:类应该对扩展开放,对修改关闭。
第二个方案:
以DarkRoast为例,顾客想要摩卡,就建立一个摩卡对象,并用它将DarkRoast对象包起来。顾客想要奶泡,就建立奶泡对象将摩卡包起来。如图:
然后结算的时候,就可以通过外围的装饰者的cost结算,奶泡的cost会先委托它装饰的对象摩卡计算,最后加上奶泡的价格。
我们可以画出类图:
对应上面的类图,我们可以画出装饰者模式的类图:
这就是装饰者模式:
装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用
- 深入解析C#设计模式编程中对建造者模式的运用
- C++设计模式编程中的观察者模式使用示例
- 举例解析设计模式中的工厂方法模式在C++编程中的运用
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 设计模式之六大设计原则