设计模式-装饰器模式

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值