# 装饰器模式允许我们在不修改原有类的基础上，动态地添加额外的功能。
# 就增加功能来说，装饰器模式比生成子类更为灵活。
# 餐吧的顾客可以选择为他们的咖啡添加额外的调料。
class Beverage:
    def __init__(self, description):
        self.description = description
        self.price = 0.0

    def cost(self):
        return self.price

class CondimentDecorator(Beverage):  # 进行装饰
    def __init__(self, beverage, description, price_increase):
        self.beverage = beverage
        self.description = f"{beverage.description}, {description}"
        self.price_increase = price_increase

    def cost(self):
        return self.beverage.cost() + self.price_increase

# 使用装饰器模式
coffee = Beverage("Espresso")
coffee_with_chocolate = CondimentDecorator(coffee, "Chocolate", 0.50)