装饰模式(Decorator Pattern),不改变原有对象的前提下,动态地给一个对象增加一些额外的功能。
// 抽象组件
interface Pizza {
String make();
}
// 具体组件
class PlainPizza implements Pizza {
@Override
public String make() {
return "Plain Pizza";
}
}
// 抽象装饰类
abstract class PizzaDecorator implements Pizza {
protected Pizza pizza;
public PizzaDecorator(Pizza pizza) {
this.pizza = pizza;
}
public String make() {
return pizza.make();
}
}
// 具体装饰类
class CheesePizzaDecorator extends PizzaDecorator {
public CheesePizzaDecorator(Pizza pizza) {
super(pizza);
}
public String make() {
return pizza.make() + " + Cheese";
}
}
// 具体装饰类
class TomatoPizzaDecorator extends PizzaDecorator {
public TomatoPizzaDecorator(Pizza pizza) {
super(pizza);
}
public String make() {
return pizza.make() + " + Tomato";
}
}
// 使用装饰器
public class Main {
public static void main(String[] args) {
Pizza pizza = new TomatoPizzaDecorator(new CheesePizzaDecorator(new PlainPizza()));
System.out.println(pizza.make()); // 输出:Plain Pizza + Cheese + Tomato
}
}