设计模式-装饰器模式

发布于:2024-09-17 ⋅ 阅读:(99) ⋅ 点赞:(0)

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


网站公告

今日签到

点亮在社区的每一天
去签到