有一个煎饼类:
public class Battercake { protected String getDesc() { return "煎饼"; } protected int cost() { return 8; }}
煎饼加鸡蛋类:
public class BattercakeWithEgg extends Battercake { @Override public String getDesc() { return super.getDesc()+"加一个鸡蛋"; } @Override public int cost() { return super.cost()+1; }}
煎饼加鸡蛋加香肠类:
public class BattercakeWithEggSausage extends BattercakeWithEgg{ @Override public String getDesc() { return super.getDesc()+"一个香肠"; } @Override public int cost() { return super.cost()+2; }}
测试:
public class Test { public static void main(String[]args){ Battercake battercake = new Battercake(); System.out.println(battercake.getDesc()+"销售价格:"+battercake.cost()); BattercakeWithEgg battercakeWithEgg = new BattercakeWithEgg(); System.out.println(battercakeWithEgg.getDesc()+"销售价格:"+battercakeWithEgg.cost()); BattercakeWithEggSausage battercakeWithEggSausage = new BattercakeWithEggSausage(); System.out.println(battercakeWithEggSausage.getDesc()+"销售价格:"+battercakeWithEggSausage.cost()); }}
执行结果:
煎饼销售价格:8
煎饼加一个鸡蛋销售价格:9
煎饼加一个鸡蛋一个香肠销售价格:11
这个时候,有一个人加了两个鸡蛋,这个时候,根据上面的就是不能算出价格的;
现在,我们用装饰者模式来写:
有一个抽象的煎饼类:
public abstract class ABattercake { protected abstract String getDesc(); protected abstract int cost();}
煎饼类继承于上面的抽象兼饼类:
public class Battercate extends ABattercake { @Override protected String getDesc() { return "煎饼"; } @Override protected int cost() { return 8; }}
我们让抽象的装饰者类继承抽象的实体:
public class AbstractDecorator extends ABattercake{ private ABattercake aBattercake; public AbstractDecorator(ABattercake aBattercake) { this.aBattercake = aBattercake; } @Override protected String getDesc() { return aBattercake.getDesc(); } @Override protected int cost() { return aBattercake.cost(); }}
煎饼添加鸡蛋的装饰类继承于抽象的装饰类:
public class EggDecorator extends AbstractDecorator{ public EggDecorator(ABattercake aBattercake) { super(aBattercake); } @Override protected String getDesc() { return super.getDesc()+"加一个鸡蛋"; } @Override protected int cost() { return super.cost()+1; }}
煎饼添加香肠的装饰类,继承于抽象的装饰类:
public class SausageDecorator extends AbstractDecorator{ public SausageDecorator(ABattercake aBattercake) { super(aBattercake); } @Override protected String getDesc() { return super.getDesc()+"加一根香肠"; } @Override protected int cost() { return super.cost()+2; }}
这个就是现在的类图:
测试:
public class Test { public static void main(String[]args){ ABattercake aBattercake; aBattercake = new Battercate(); aBattercake = new EggDecorator(aBattercake); aBattercake = new EggDecorator(aBattercake); aBattercake = new SausageDecorator(aBattercake); System.out.println(aBattercake.getDesc()+"价格为:"+aBattercake.cost()); }}
执行结果:
煎饼加一个鸡蛋加一个鸡蛋加一根香肠价格为:12
联系客服