装饰器模式:指在不修改原有对象基础上,增加额外功能属性,提供了更有弹性的扩展功能。看起来虽然很像代理模式但两者层级不同,代理模式虽然也是增强但只是对业务本身增强,但装饰器模式是对类的本身进行一个增强。例如小明需要租房,代理就是中介帮忙处理,你只需要付钱即可,联系房东获取性价比最高的房源都由代理负责。而装饰者则更偏重对象本身的增强,相当于小明自己新增了一个寻找房源和联系房东的增强属性。属于结构性设计模式
public abstract class BatterCake {
public abstract String getMsg();
public abstract int getPrice();
}
public class BaseBatterCake extends BatterCake {
BaseBatterCake cake;
public BaseBatterCake(BaseBatterCake cake){
this.cake = cake;
}
public BaseBatterCake(){
}
public String getMsg() {
return "煎饼";
}
public int getPrice() {
return 5;
}
}
public class EggBatterCake extends BatterCake{
BatterCake cake ;
public EggBatterCake(BatterCake cake){
this.cake = cake;
}
public String getMsg() {
return this.cake.getMsg()+"+鸡蛋";
}
public int getPrice() {
return cake.getPrice()+1;
}
}
public class Test {
public static void main(String[] args) {
BatterCake cake = new BaseBatterCake();
cake.getMsg();
cake = new EggBatterCake(cake);
cake =new EggBatterCake(cake);
System.out.println(cake.getMsg()+"-"+cake.getPrice());
}
}