decorator设计模式
类组合
- 一个抽象接口
- 一个具体实现类
- 一个抽象装饰器
- 多个具体装饰器
抽象接口
// Component.java
public interface Component {
void method();
}
具体实现类
// ConcreteComponent.jaa
public class ConcreteComponent implements Component {
@Override
public void method() {
System.out.println("basic method");
}
}
抽象装饰器
// Decorator.java
public class Decorator implements Component {
protected Component component;
public Decorator(Component component) {
this.component = component;
}
// 通过delegation的方式override接口里的方法
@Override
public void method() {
component.method();
}
}
具体装饰器A
// DecoratorA.java
public class DecoratorA extends Decorator {
public DecoratorA(Component component) {
super(component);
}
@Override
public void method() {
// 增加新特性
System.out.println("method in A");
// 基础功能仍由delegation实现
super.method();
}
}
具体装饰器B
// DecoratorB.java
public class DecoratorB extends Decorator {
public DecoratorB(Component component) {
super(component);
}
@Override
public void method() {
// 增加新特性
System.out.println("method in B");
// 基础功能仍由delegation实现
super.method();
}
}
客户端
// Client.java
public void static main(String[] args) {
Component component = new DecoratorB(new DecoratorA(new ConcreteComponent()));
component.method();
}
// in terminal
// method in B
// method in A
// basic method