//与composite一样都采用递归组合实现
public class Decorator {
// 抽象父类
abstract class Ingredient {
public abstract void getDescription();
}
// 面包
class Bread extends Ingredient {
String desc;
public Bread(String desc) {
this.desc = desc;
}
@Override
public void getDescription() {
System.out.println(desc);
}
}
//抽象装饰类
//BreadDecorator与Ingredient即泛化又组合
abstract class BreadDecorator extends Ingredient {
Ingredient ingredient;
public BreadDecorator(Ingredient ingredient) {
this.ingredient = ingredient;
}
}
//夹肉
class Pork extends BreadDecorator {
public Pork(Ingredient ingredient) {
super(ingredient);
}
@Override
public void getDescription() {
ingredient.getDescription();
System.out.println("pork decorate...");
}
}
//夹蔬菜
class Vegetable extends BreadDecorator {
public Vegetable(Ingredient ingredient) {
super(ingredient);
}
@Override
public void getDescription() {
ingredient.getDescription();
System.out.println("vegetable decorate...");
}
}
public static void main(String[] args){
Decorator decorator = new Decorator();
Ingredient ingredient = decorator.new Pork(decorator.new Bread("pork bread..."));
ingredient.getDescription();
Ingredient ingredient2 = decorator.new Vegetable(decorator.new Pork(decorator.new Bread("vegetable pork bread...")));
ingredient2.getDescription();
}
}
//http://miaoxiaodong78.blog.163.com/blog/static/18765136200701232434996/