装饰者模式(the Decorator Pattern)
动态地将责任附加在对象上。若有扩展功能,装饰者提供了比继承更有弹性的替代方案。
以咖啡厅为例,当仅仅是对父类Beverage继承时,如果子类需要增加新的调料,那么子类的数量会迅速增大,造成管理和维护上的困难。如果调料的种类有变化的时候,子类也要进行相应的修改。这样就违反了设计原则:类应该对修改关闭,对扩展开放。因此我们要引入装饰者模式,对饮料进行一层层的调料装饰。
现在来看看具体的例子:
1.设计Beverage父类:
2.调料抽象类














3.具体的饮料

























4.具体的调料






















































5.具体应用测试
























这样做的好处在于:
1. 增加,修改调料的时候,不会影响其他的类
2. 功能作用划分清晰,利于管理
在java.io包中,就用了很多这样的模式。