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

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

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

三:实例

自我整理设计模式之装饰者模式(三)_第1张图片

/**
*装饰模式 主方法 星巴克的咖啡
*/
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();
 	}
 }

输出结果:
自我整理设计模式之装饰者模式(三)_第2张图片

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

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

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

《Head Firsts设计模式》

你可能感兴趣的:(设计模式,java,设计模式,java)