装饰器模式:有效地把类的核心职责和装饰功能区分开
/**
* 装饰模式
* 关键:
* Component接口:定义方法
* ConcreteComponent:接口实现类,实现具体方法
* Decorator:装饰器接口,实现Component接口,定义protected Component component;
* 并定义传入component的方法;还有重写Componment中的接口方法
* (实质调用ConcreteComponent实现类中的具体方法,并增加功能)
* ConcreteDedcorator:装饰器实现类,集成Decorator接口,
* 重点:
* 定义protected Component component;
* 是重写Componment中的接口方法,
* 重写方法:调用传入的ConcreteComponent的方法,并增加功能
*
* 注:其中Component 和 Decorator可省略
* @author zbl
*
*/
public class DecoratorCustomer {
public static void main(String[] args) {
Component component = new ConcreteComponent();
Decorator decorator1 = new ConcreteDecoratorA();
Decorator decorator2 = new ConcreteDecoratorB();
decorator1.setComponent(component);
decorator2.setComponent(decorator1);
decorator2.operation();
}
}
interface Component{
public void operation();
}
class ConcreteComponent implements Component{
@Override
public void operation() {
System.out.println("xixi");
}
}
abstract class Decorator implements Component{
public Component component;
public void setComponent(Component component){
this.component = component;
}
}
class ConcreteDecoratorA extends Decorator{
public Component component;
public void setComponent(Component component){
this.component = component;
}
@Override
public void operation() {
System.out.println("a1");
component.operation();
System.out.println("a2");
}
}
class ConcreteDecoratorB extends Decorator{
public Component component;
public void setComponent(Component component){
this.component = component;
}
@Override
public void operation() {
System.out.println("b1");
component.operation();
System.out.println("b2");
}
}