一、装饰器模式
装饰器模式(Decorator Pattern):动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案
类图:
- Component:组件
- ConcreteComponent:将要动态加上新行为的对象,扩展自Component
- Decorator:每个装饰者都有一个组件,就是说装饰者有个实例变量以保存某个Component的引用,这是装饰者共同实现的接口,此类也可以是抽象类
- ConcreteDecoratorA和ConcreteDecoratorB中有一个实例变量,可以记录所装饰的事物
二、模式详解
用户需求:Starbuzz是以扩张速度最快而闻名的咖啡连锁店,Beverage(饮料)是一个抽象类,cost() 方法是抽象的,下面各种咖啡,购买时加入各种调料
需求分析:每种咖啡都是具体的子类,这里如果一旦有个调料如milk价格变更,那就需要修改所有相关的子类代码,这样下去ÿ