概念
使用一种对客户端透明的方式动态地扩展对象的功能(继承关系的一种替代方案,比继承更灵活)。通常用于需要动态扩展类功能的场景。
实现方式
- Component —— 抽象组件,被修饰对象的原始对象
- ConcreteComponent —— 被修饰对象
- Decorator —— 抽象装饰类继承抽象组件Component,并持有原始组件的引用。
- ConcreteDecorator —— 具体装饰类,用于添加新功能。
public abstract class Component {
public abstract void fun();
}
public class ConcreteComponent extends Component {
@Override
public void fun(){
System.out.println("ok");
}
}
public abstract class Decorator extends Component {
private Component component;
public Decorator(Component c){
this.component = c;
}
@Override
public void fun(){
component.fun();
}
}
public class ConcretDecorator extends Decorator{
public ConcretDecorator(Component c){
super(c);
}
@Override
public void fun(){
fun1();
super.fun();
fun2();
}
public void fun1(){
System.out.println("1");
}
public void fun2(){
System.out.println("2");
}
}