设计模式之装饰者模式
定义
装饰者模式动态的将责任附加到对象上。若要扩展功能,装饰着提供了比继承更有弹性的替代方案。
装饰者类图
用一个实际例子来说,我们现在要开一个咖啡店,咖啡有不同的咖啡(黑咖啡,白咖啡),也可以加入不同的调料()。所有的咖啡类都继承与超类Beverage饮料类,其有计算价格的抽象方法cost()。现在我么你需要计算客户所点的饮品的价格(比如加奶黑咖啡)。不管我们是想调料作为变量在不同咖啡子类中判断是否有某种变量,或是为每种咖啡单独建立一个子类,当调料种类很多且价格变化时,不仅需要建立很多子类造成类爆炸,也会导致需要修改很多的代码。
使用上面的设计模式,将调料(装饰器)也是继承Beverage的抽象类,不同的调料类继承自该装饰器,把咖啡种类看做一种主要组件(一份饮品只可能有一种咖啡加上别的调料),每当用到一种调料,就用该调料去包装咖啡,形成一个新的组件。作为新的组件被新的调料继续包装。如下图:
在具体的调料类中:可以使用如下方法,进行包装
计算价钱时:调用: