当前位置 : 主页 > 编程语言 > java >

Java装饰者模式示例

来源:互联网 收集:自由互联 发布时间:2021-06-28
gistfile1.txt package Decorator;//汉堡基类(被装饰者)abstract class Humburger {protected String name;public String getName(){return name;}public abstract double getPrice();}//鸡肉堡类(被装饰者的初始状态,有些自己的简
gistfile1.txt
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");
	}
}
网友评论