Component:装饰者和被装饰者共同的父类,是一个接口或者抽象类,用来定义基本行为
ConcreteComponent:定义具体对象,即被装饰者
Decorator:抽象装饰者,继承自Component,从外类来扩展ConcreteComponent。对于ConcreteComponent来说,不需要知道Decorator的存在,Decorator是一个接口或抽象类
ConcreteDecorator:具体装饰者,用于扩展ConcreteComponent
public abstract class TaoCan {
public abstract int getPrice();
public abstract String getDesc();
}
public class HanBao extends TaoCan {
@Override
public int getPrice() {
return 15;
}
@Override
public String getDesc() {
return "一个汉堡";
}
}
public abstract class Decorator extends TaoCan {
}
public class KeLe extends Decorator {
TaoCan taoCan;
@Override
public int getPrice() {
return 6+taoCan.getPrice();
}
@Override
public String getDesc() {
return "可乐+"+taoCan.getDesc();
}
public KeLe(TaoCan taoCan) {
this.taoCan = taoCan;
}
}
测试
买两杯可乐一个汉堡
public class Test {
public static void main(String[] args) {
test(new KeLe(new KeLe(new HanBao())));
}
private static void test(Decorator deractor){
System.out.println(deractor.getDesc());
System.out.println(deractor.getPrice());
}
}











网友评论