装饰模式
1.定义
装饰(Decorator)模式 : 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活.
2.实现
装饰模式
- 抽象构件(Component)角色: 给出一个抽象接口,以规范准备接收附加责任的对象.抽象构件角色作为整个装饰模式类图体系的超类,其子类均可以被增添附加责任.
- 具体构件(Concrete Component)角色: 定义一个将要接收附加责任的类.
- 装饰(Decorator)角色: 持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口.
- 具体装饰(Concrete Decorator)角色: 负责给构件对象增添附加的责任.
public interface Component {
/**
* 业务操作
*/
void operation();
}
public class ConcreteComponent implements Component{
@Override
public void operation() {
System.out.print("common operation + ");
}
}
public class Decorator implements Component {
private Component component;
Decorator(Component component){
this.component = component;
}
@Override
public void operation() {
// 委派给构件
component.operation();
}
}
public class ConcreteDecoratorA extends Decorator {
public ConcreteDecoratorA(Component component) {
super(component);
}
@Override
public void operation() {
super.operation();
System.out.println("DecoratorA operation");
}
}
public class ConcreteDecoratorB extends Decorator {
public ConcreteDecoratorB(Component component) {
super(component);
}
@Override
public void operation() {
super.operation();
System.out.println("DecoratorB operation");
}
}
客户端:
public static void main(String[] args) {
Component component = new ConcreteComponent();
Component componentA = new ConcreteDecoratorA(component);
Component componentB = new ConcreteDecoratorB(component);
componentA.operation();
componentB.operation();
}