1,定义:Attach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible alternative to subclassing for extending functionality. (动态的给一个对象添加其余职责,就增长功能来讲,装饰模式比生成子类更加灵活)java
2,通用类图ide
3,实例代码:flex
/** 抽象组件 **/ public abstract class Component { public abstract void operate(); } /** 具体组件实现类 **/ public class ExecuteComponent extends Component{ @Override public void operate() { System.out.println("我是真正的执行组件"); } } /** 装饰组件类 **/ public class Decorator extends Component{ private Component component; public Decorator(Component component){ this.component = component; } @Override public void operate() { component.operate(); } } /** 具体装饰类1 **/ public class ExecuteDecoratorOne extends Decorator{ public ExecuteDecoratorOne(Component component) { super(component); } @Override public void operate() { System.out.println("装饰类1"); super.operate(); } } /** 具体装饰类2 **/ public class ExecuteDecoratorTwo extends Decorator{ public ExecuteDecoratorTwo(Component component) { super(component); } @Override public void operate() { System.out.println("装饰类 2"); super.operate(); } } /** 模式使用 **/ public class Clent { public static void main(String[] args){ Component component = new ExecuteComponent(); Component component1 = new ExecuteDecoratorOne(component); Component component2 = new ExecuteDecoratorTwo(component1); component.operate(); System.out.println("-----------------"); component1.operate(); System.out.println("-----------------"); component2.operate(); } } /** 运行结果 **/ 我是真正的执行组件 ----------------- 装饰类1 我是真正的执行组件 ----------------- 装饰类 2 装饰类1 我是真正的执行组件
4,模式角色this
(1)抽象构件: 一个接口或者抽象类,定义咱们最核心的对象。code
(2)具体构件:是抽象构件的实现,通常装饰的就是这玩意component
(3)装饰角色:通常是一个抽象类,也继承了抽象构件,通常会有一个私有方法依赖抽象构件对象
(4)具体装饰角色:继承装饰角色,对具体构件进行装饰,或者对装饰角色进行装饰继承