package com.zwx.design.pattern.decorator.common; import java.math.BigDecimal; public class Cake { public String getCakeMsg(){ return "我是一个8英寸的普通蛋糕"; } public BigDecimal getPrice(){ return new BigDecimal("68"); } }
package com.zwx.design.pattern.decorator.common; import java.math.BigDecimal; public class CakeAddMango extends Cake { @Override public String getCakeMsg() { return super.getCakeMsg() " 1个芒果"; } @Override public BigDecimal getPrice() { return super.getPrice().add(new BigDecimal("10")); } }
package com.zwx.design.pattern.decorator.common; import java.math.BigDecimal; public class CakeAddMangoAndGrape extends CakeAddMango { @Override public String getCakeMsg() { return super.getCakeMsg() " 1个葡萄"; } @Override public BigDecimal getPrice() { return super.getPrice().add(new BigDecimal("5")); } }
package com.zwx.design.pattern.decorator.common; public class TestCake { public static void main(String[] args) { //普通蛋糕 Cake cake = new Cake(); System.out.println(cake.getCakeMsg() ",价格:" cake.getPrice()); //加芒果蛋糕 CakeAddMango cakeAddMango = new CakeAddMango(); System.out.println(cakeAddMango.getCakeMsg() ",价格:" cakeAddMango.getPrice()); //加芒果和葡萄蛋糕 CakeAddMangoAndGrape cakeAddMangoAndGrape = new CakeAddMangoAndGrape(); System.out.println(cakeAddMangoAndGrape.getCakeMsg() ",价格:" cakeAddMangoAndGrape.getPrice()); } }
我是一个8英寸的普通蛋糕,价格:68 我是一个8英寸的普通蛋糕 1个芒果,价格:78 我是一个8英寸的普通蛋糕 1个芒果 1个葡萄,价格:83
package com.zwx.design.pattern.decorator; import java.math.BigDecimal; public abstract class Cake { public abstract String getCakeMsg(); public abstract BigDecimal getPrice(); }
package com.zwx.design.pattern.decorator; import java.math.BigDecimal; public class BaseCake extends Cake { @Override public String getCakeMsg() { return "我是一个8英寸的普通蛋糕"; } @Override public BigDecimal getPrice() { return new BigDecimal("68"); } }
package com.zwx.design.pattern.decorator; import java.math.BigDecimal; public abstract class CakeDecorator extends Cake{ private Cake cake; public CakeDecorator(Cake cake) { this.cake = cake; } @Override public String getCakeMsg() { return this.cake.getCakeMsg(); } @Override public BigDecimal getPrice() { return this.cake.getPrice(); } }
package com.zwx.design.pattern.decorator; import java.math.BigDecimal; public class CakeAddGrapeDecorator extends CakeDecorator { public CakeAddGrapeDecorator(Cake cake) { super(cake); } @Override public String getCakeMsg() { return super.getCakeMsg() " 1个葡萄"; } @Override public BigDecimal getPrice() { return super.getPrice().add(new BigDecimal("5")); } }
package com.zwx.design.pattern.decorator; import java.math.BigDecimal; public class CakeAddMangoDecorator extends CakeDecorator { public CakeAddMangoDecorator(Cake cake) { super(cake); } @Override public String getCakeMsg() { return super.getCakeMsg() " 1个芒果"; } @Override public BigDecimal getPrice() { return super.getPrice().add(new BigDecimal("10")); } }
package com.zwx.design.pattern.decorator; public class TestCakeDecorator { public static void main(String[] args) { Cake cake = null; //普通蛋糕 cake = new BaseCake(); System.out.println(cake.getCakeMsg() ",价格:" cake.getPrice()); //加一个芒果 cake = new CakeAddMangoDecorator(cake); System.out.println(cake.getCakeMsg() ",价格:" cake.getPrice()); //加一个葡萄 cake = new CakeAddGrapeDecorator(cake); System.out.println(cake.getCakeMsg() ",价格:" cake.getPrice()); //再加一个芒果 cake = new CakeAddMangoDecorator(cake); System.out.println(cake.getCakeMsg() ",价格:" cake.getPrice()); } }
我是一个8英寸的普通蛋糕,价格:68 我是一个8英寸的普通蛋糕 1个芒果,价格:78 我是一个8英寸的普通蛋糕 1个芒果 1个葡萄,价格:83 我是一个8英寸的普通蛋糕 1个芒果 1个葡萄 1个芒果,价格:93