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