//抽象组件:手抓饼
public abstract class Grabthecake {
//抽象的方法
public abstract double Cake();
}
2.ConcreteCake1 .java
//具体组件
//实现手抓饼的第一步:面饼的价格。
//这里是被装饰者
public class ConcreteCake1 extends Grabthecake{
public final double CAKEPRICE=3.0;
public double Cake() {
return CAKEPRICE;
}
}
3.ConcreteCake.java
//装饰
public abstract class ConcreteCake extends Grabthecake{
Grabthecake grabthecake;
public ConcreteCake(Grabthecake grabthecake) {
this.grabthecake=grabthecake;
}
}
4.ConcreteCake2.java
//具体装饰1
//GREENSPRICE:菜的价格
//菜加饼的价格
public class ConcreteCake2 extends ConcreteCake{
public final double GREENSPRICE=0.5;
ConcreteCake2(Grabthecake grabthecake){
super(grabthecake);
}
public double Cake() {
double price=0.0;
price = grabthecake.Cake()+green();
return price;
}
public double green() {
return GREENSPRICE;
}
}
5.ConcreteCake3.java
//具体装饰者二
//CHICKENSTEAKPRICE:鸡排
public class ConcreteCake3 extends ConcreteCake{
public final double CHICKENSTEAKPRICE=3.0;
public ConcreteCake3(Grabthecake grabthecake) {
super(grabthecake);
}
@Override
public double Cake() {
double price=0;
price=grabthecake.Cake()+Chickensteakprice();
return price;
}
public double Chickensteakprice() {
return CHICKENSTEAKPRICE;
}
}
6.ConcreteCake4.java
//具体装饰者三
//加入煎蛋以后的价格
public class ConcreteCake4 extends ConcreteCake {
public final double EGGPRICE=1.0;
public ConcreteCake4(Grabthecake grabthecake){
super(grabthecake);
}
public double Cake() {
double price =0;
price=grabthecake.Cake()+EggPrice();
return price;
}
public double EggPrice() {
return EGGPRICE;
}
}
7. Application.java
public class Application {
public static void main(String[] args) {
Grabthecake grabthecake=new ConcreteCake1();
System.out.println("饼的价格为:"+grabthecake.Cake());
Grabthecake grabthecake1= new ConcreteCake2(grabthecake);
System.out.println("饼+菜的价格为:"+grabthecake1.Cake());
Grabthecake grabthecake2= new ConcreteCake2(grabthecake1);
System.out.println("饼+2*菜的价格为:"+grabthecake2.Cake());
Grabthecake grabthecake3= new ConcreteCake3(grabthecake1);
System.out.println("饼+菜+鸡排的价格为:"+grabthecake3.Cake());
Grabthecake grabthecake4= new ConcreteCake4(grabthecake3);
System.out.println("饼+菜+鸡排的价格为:"+grabthecake4.Cake());
}
}