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

}
运行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43921423/article/details/113092857
今日推荐