Java 装饰者模式 —— { }

被装饰者接口
//被装饰者的接口
public interface Drink {

	float cost();			//计算价格
	String description();	//描述
	
}
具体的被装饰者
public class SoyaBeanMilk implements Drink{

	@Override
	public float cost() {
		return 10f;
	}

	@Override
	public String description() {
		return "纯豆浆";
	}

}
装饰者基类
public abstract class Decorator implements Drink{

	private Drink drink;				//要装饰的对象
	public Decorator(Drink drink){
		this.drink = drink;
	}
	@Override
	public float cost() {
		return drink.cost();
	}

	@Override
	public String description() {
		return drink.description();
	}
	
}
具体的装饰者_01
public class SugarDecorator extends Decorator {

	public SugarDecorator(Drink drink) {
		super(drink);
	}
	@Override
	public float cost() {
		return super.cost()+1.0f;
	}
	
	@Override
	public String description() {
		return super.description()+"+糖";
	}
	
}
具体的装饰者_02
public class BlackBeanDecorator extends Decorator {

	public BlackBeanDecorator(Drink drink) {
		super(drink);
	}
	@Override
	public float cost() {
		return super.cost()+2.0f;
	}
	
	@Override
	public String description() {
		return super.description()+"+黑豆";
	}

}
具体的装饰者_03
public class EggDecorator extends Decorator {

	public EggDecorator(Drink drink) {
		super(drink);
	}
	@Override
	public float cost() {
		return super.cost()+3.0f;
	}
	
	@Override
	public String description() {
		return super.description()+"+鸡蛋";
	}

}
测试类
public class Test {

	public static void main(String[] args) {
		
//		OutputStream out = new FileOutputStream("xxx");
//		BufferedOutputStream bos = new BufferedOutputStream(out);
//		PrintStream ps = new PrintStream(bos);
//		ps.print(..);

		Drink drink = new SoyaBeanMilk();
		SugarDecorator sugar = new SugarDecorator(drink);
		EggDecorator egg = new EggDecorator(sugar);
		BlackBeanDecorator blackBean = new BlackBeanDecorator(egg);
		
		System.out.println("你点的豆浆是:"+blackBean.description());
		System.out.println("一共花了"+blackBean.cost()+"元");
	}

}
运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微风拂晚霞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值