定义
动态的给对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
主要角色:
抽象构件角色:Component 给出一个抽象接口,以规范准备接受附加责任的对象
具体构件角色:ConcreteComponent 定义一个将要接收附加责任的类
装饰角色:Decorator 持有一个构件对象,需要定义一个与组件接口一致的接口
具体装饰角色:ConcreteDecorator 负责给构件对象添加新的责任
UML效果图:
下面简单的代码例子
package com.pattern.decorator;
public abstract class Component {
public abstract void operation();
}
package com.pattern.decorator;
public class ConcreteComponent extends Component {
public void operation() {
System.out.println("普通操作");
}
}
package com.pattern.decorator;
public abstract class Decorator extends Component { protected Component component; public Decorator(Component component) { this.component = component; } public void operation(); }
public class ConcreteDecorator extends Decorator { public ConcreteDecoratorA(Component component) { super(component); } public void operation() { System.out.println("增加功能A");
component.operation();System.out.println("增加功能B");} }
测试类:package com.pattern.decorator; public class Client{ public static void main(String []args){ Component component = new ConcreteComponent();
component.operation();
component = new ConcreteDecorator(component);component.operation(); }}
结果:
普通操作
新增功能A
普通操作
新增功能B