欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > 设计模式-装饰器模式

设计模式-装饰器模式

2024/10/24 22:13:44 来源:https://blog.csdn.net/qq_31856061/article/details/142102106  浏览:    关键词:设计模式-装饰器模式

UML

在这里插入图片描述

代码

// 咖啡接口  
interface Coffee {  String getDescription();  double cost();  
}  // 浓缩咖啡  
class Espresso implements Coffee {  @Override  public String getDescription() {  return "Espresso";  }  @Override  public double cost() {  return 1.99;  }  
}  // 装饰器抽象类  
abstract class CoffeeDecorator implements Coffee {  protected Coffee decoratedCoffee;  public CoffeeDecorator(Coffee decoratedCoffee) {  this.decoratedCoffee = decoratedCoffee;  }  @Override  public String getDescription() {  return decoratedCoffee.getDescription();  }  @Override  public double cost() {  return decoratedCoffee.cost();  }  
}  // 牛奶装饰器  
class Milk extends CoffeeDecorator {  public Milk(Coffee decoratedCoffee) {  super(decoratedCoffee);  }  @Override  public String getDescription() {  return decoratedCoffee.getDescription() + ", Milk";  }  @Override  public double cost() {  return decoratedCoffee.cost() + 0.10;  }  
}  // 糖装饰器  
class Sugar extends CoffeeDecorator {  public Sugar(Coffee decoratedCoffee) {  super(decoratedCoffee);  }  @Override  public String getDescription() {  return decoratedCoffee.getDescription() + ", Sugar";  }  @Override  public double cost() {  return decoratedCoffee.cost() + 0.10;  }  
}  // 使用  
public class CoffeeOrder {  public static void main(String[] args) {  Coffee espresso = new Espresso();  Coffee espressoWithMilk = new Milk(espresso);  Coffee espressoWithMilkAndSugar = new Sugar(espressoWithMilk);  System.out.println(espressoWithMilkAndSugar.getDescription() + " $" + espressoWithMilkAndSugar.cost());  }  
}// 输出结果:Espresso, Milk, Sugar $2.19

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com