首页 > 其他 > 详细

装饰者模式

时间:2019-11-11 22:53:03      阅读:53      评论:0      收藏:0      [点我收藏+]
装饰者模式:
动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
以饮料店配调料为例:
//测试类
public class StarbuzzCoffee {
 public static void main(String[] args) {
  Beverage beverage = new Espresso();//点一杯没有任何调料的咖啡
  System.out.println(beverage.getDescription()+"$"+beverage.cost());//打印描述和价格
  Beverage beverage2 = new HouseBlend();//点一杯摩卡、奶泡搭配的HouseBlend
  beverage2 = new Mocha(beverage2);
  beverage2 = new Whip(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";
 }
 public double cost() {
  return 1.99;
 }
}

public class HouseBlend extends Beverage{//饮料
 public HouseBlend() {
  description = "HouseBlend";
 }
 public double cost() {
  return .98;
 }
}
public abstract class CondimentDecorator extends Beverage{//装饰者超类
 public abstract String getDescription();
}
public class Mocha extends CondimentDecorator{
 Beverage beverage;
 
 public Mocha(Beverage beverage) {
  this.beverage=beverage;
 }
 
 public String getDescription() {
  return beverage.getDescription()+",Mocha";
 }
 
 public double cost() {
  return .20+beverage.cost();
 }
}
public class Whip extends CondimentDecorator{
 Beverage beverage;
 
 public Whip(Beverage beverage) {
  this.beverage=beverage;
 }
 
 public String getDescription() {
  return beverage.getDescription()+",Whip";
 }
 
 public double cost() {
  return .30+beverage.cost();
 }
}

装饰者模式

原文:https://www.cnblogs.com/jungledove/p/11838980.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!