forked from p46318075/CodePattern
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
23 lines
872 B
23 lines
872 B
9 months ago
|
# 装饰器模式允许我们在不修改原有类的基础上,动态地添加额外的功能。
|
||
|
# 就增加功能来说,装饰器模式比生成子类更为灵活。
|
||
|
# 餐吧的顾客可以选择为他们的咖啡添加额外的调料。
|
||
|
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)
|