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"); } }