gistfile1.txt package Decorator;//汉堡基类(被装饰者)abstract class Humburger {protected String name;public String getName(){return name;}public abstract double getPrice();}//鸡肉堡类(被装饰者的初始状态,有些自己的简
package Decorator;
//汉堡基类(被装饰者)
abstract class Humburger {
protected String name;
public String getName(){
return name;
}
public abstract double getPrice();
}
//鸡肉堡类(被装饰者的初始状态,有些自己的简单装饰)
class ChickenBurger extends Humburger{
public ChickenBurger(){
name = "鸡肉堡";
}
@Override
public double getPrice() {
return 10;
}
}
//配料的基类(装饰者,用来对汉堡进行多层装饰 每层装饰添加一些配料)
abstract class Condiment extends Humburger{
public abstract String getName();
}
//生菜 装饰者第一层
class Lettuce extends Condiment{
Humburger humburger; //生成一个新的汉堡对象(空壳)
public Lettuce(Humburger humburger){
//把传入的汉堡参数赋值给类内新生成的汉堡对象 拿到外部传入的待加工产品
//传入的汉堡加了什么调料我不管 我只管在下边@Override内往上边再加我的调料
this.humburger = humburger;
}
@Override
public String getName(){
// TODO Auto-generated method stub
return humburger.getName()+"+生菜";//放上待加工产品 撒上调料 出炉
}
@Override
public double getPrice() {
// TODO Auto-generated method stub
return humburger.getPrice()+1.5; //生菜1.5元//放上待加工产品 撒上调料 出炉
}
}
//辣椒类 装饰者第二层
class Chilli extends Condiment{
Humburger humburger;
public Chilli(Humburger humburger){
this.humburger = humburger;
}
@Override
public String getName() {
// TODO Auto-generated method stub
return humburger.getName()+"+辣椒";
}
@Override
public double getPrice() {
// TODO Auto-generated method stub
return humburger.getPrice()+0.5; //辣椒0.5元
}
}
public class HumburgerTest{
public static void main(String[] args) {
Humburger aTaocan = new ChickenBurger();//这里用到了多态直接创建子类对象
System.out.println("商品名称:"+aTaocan.getName()+" 价格:"+aTaocan.getPrice()+" RMB");
Lettuce bTaocan = new Lettuce(aTaocan);
System.out.println("商品名称:"+bTaocan.getName()+" 价格:"+bTaocan.getPrice()+" RMB");
Chilli cTaocan = new Chilli(aTaocan);
System.out.println("商品名称:"+cTaocan.getName()+" 价格:"+cTaocan.getPrice()+" RMB");
Chilli dTaocan = new Chilli(bTaocan);
System.out.println("商品名称:"+dTaocan.getName()+" 价格:"+dTaocan.getPrice()+" RMB");
Chilli eTaocan = new Chilli(dTaocan);
System.out.println("商品名称:"+eTaocan.getName()+" 价格:"+eTaocan.getPrice()+" RMB");
}
}
