自我整理设计模式之装饰者模式(三)

一:装饰者模式
装饰者模式动态地将责任附加到对象上。
若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

二:设计原则
类应该对扩展开放,对修改关闭

三:实例

在这里插入图片描述

/**
*装饰模式 主方法 星巴克的咖啡
*/
public class StarbuzzCoffee {
	public static void main(String[] args) {
  	//浓缩咖啡
  	Beverage beverage = new Espresso();
  	System.out.println(beverage.getDescription()+",$"+beverage.cost());
  
  	//首选咖啡 调料加奶泡 加摩卡
  	Beverage beverage2 = new HouseBlend();
 	 beverage2 = new Whip(beverage2);
  	beverage2 = new Mocha(beverage2);
  
  	System.out.println(beverage2.getDescription()+",$"+beverage2.cost());
  }
}


/**
 * 饮料的抽象类
 */
public abstract class Beverage {

	String description = "Unknown Beverage"public String getDescription() {	
		return description;
 	}
 
 	public abstract double cost();
 }
/**
 * 浓缩咖啡
 */
public class Espresso extends Beverage {
	public Espresso() {
 	 	description = "Espresso 浓缩咖啡";
 	}
 	@Override
 	public double cost() {
		return 1.99;	
	}
 }


/**
 * 首选咖啡
 */
public class HouseBlend extends Beverage {
	public HouseBlend() {
  		description = "House Blend Coffee 首选咖啡";
 	}
 	@Override
 	public double cost() {
  		return .89;
 	}
 }

/**
 * 调料的抽象类 (装饰者类)
 */
public abstract class CondimentDecorator extends Beverage {
	public abstract String getDescription();
}

/**
* 调料-奶泡
*/
public class Whip extends CondimentDecorator{
	Beverage beverage;
	public Whip(Beverage beverage) {
  		this.beverage = beverage;
 	}
 	@Override
 	public String getDescription() {
  		return beverage.getDescription() + ",Whip 奶泡";
 	}
 	@Override
 	public double cost() {
  		return .10+ beverage.cost();
 	}
}

/**
* 调料-摩卡
*/
public class Mocha extends CondimentDecorator {
	Beverage beverage;
	
	public Mocha(Beverage beverage) {
  		this.beverage = beverage;
 	}
 	
 	@Override
 	public String getDescription() {
   		return beverage.getDescription() + ",Mocha 摩卡";
 	}
 
 	@Override
 	public double cost() {
   	return .20 + beverage.cost();
 	}
 }

输出结果:
在这里插入图片描述

设计模式 所涉及的代码和知识点 均来自以下参考书籍

本人尽将自己的学习内容整理在此,方便自己和大家一起查阅。

若要转载,复制粘贴 请标明来源。

《Head Firsts设计模式》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值