装饰者模式
定义:动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
类图

- Component:装饰者和被装饰者实现的公共接口
- ConcreteComponent:被装饰者,可以单独使用,也可以被装饰者包装之后使用
- Decorator:装饰者继承的抽象类,持有被装饰者的引用
- ConcreteDecorator:实际的装饰者,可以有自己的方法,也可以扩展装饰者的状态
代码示例
//类图中的Component public interface House { void layout(); } //类图中的ConcreteComponent public class Villa implements House{ @Override public void layout() { System.out.println("这是一栋别墅!"); } } //类图中的ConcreteComponent public class GardenHouse implements House{ @Override public void layout() { System.out.println("这是一套花园洋房!"); } } //类图中的Decorator public abstract class FinishingMaterial implements House { protected House house; public FinishingMaterial(House house){ this.house=house; } @Override public void layout() { house.layout(); } } //类图中的ConcreteDecorator public class Window extends FinishingMaterial { public Window(House house) { super(house); } @Override public void layout() { super.layout(); System.out.println("加上一扇窗"); } } //类图中的ConcreteDecorator public class Door extends FinishingMaterial { public Door(House house) { super(house); } @Override public void layout() { super.layout(); System.out.println("加上一道门!"); } }
测试
public class DecoratorTestDemo { public static void main(String[] args){ House gardenHouse = new GardenHouse(); gardenHouse = new Door(gardenHouse); gardenHouse = new Window(gardenHouse); gardenHouse.layout(); House villa = new Villa(); villa = new Window(new Door(villa)); villa.layout(); } }
运行结果

jdk中的装饰者模式

其他
- 被装饰者可以独立使用
- 装饰者可以在运行时给被装饰者附加功能
语言是思想的载体

浙公网安备 33010602011771号