欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 基于Python学习《Head First设计模式》第三章 装饰者模式

基于Python学习《Head First设计模式》第三章 装饰者模式

2025/6/6 23:24:46 来源:https://blog.csdn.net/wzx77/article/details/148379746  浏览:    关键词:基于Python学习《Head First设计模式》第三章 装饰者模式

装饰者模式

定义

在这里插入图片描述

项目:星巴兹饮料

在这里插入图片描述
在这里插入图片描述

类图

在这里插入图片描述

部分实现代码

在这里插入图片描述

from abc import ABC, abstractmethodclass Beverage(ABC):"""饮料"""description = "Unknown Beverage"def get_description(self):return self.description@abstractmethoddef cost(self) -> float:  # python中无需区分double和floatpassclass CondimentDecorator(Beverage):"""调料"""@abstractmethoddef get_description(self):pass

在这里插入图片描述

class Espresso(Beverage):"""浓缩咖啡"""def get_description(self) -> str:return "浓缩咖啡"def cost(self) -> float:return 1.99class HouseBlend(Beverage):"""家常咖啡"""def get_description(self) -> str:return "家常咖啡"def cost(self) -> float:return 0.89

在这里插入图片描述

class Mocha(CondimentDecorator):"""摩卡"""def __init__(self, beverage:Beverage):self.beverage = beveragedef get_description(self) -> str:return self.beverage.get_description() + ', 摩卡'def cost(self) -> float:return self.beverage.cost() + 0.2

完整代码

在这里插入图片描述


from abc import ABC, abstractmethodclass Beverage(ABC):"""饮料"""description = "Unknown Beverage"def get_description(self) -> str:return self.description@abstractmethoddef cost(self) -> float:  # python中无需区分double和floatpassclass CondimentDecorator(Beverage):"""调料"""@abstractmethoddef get_description(self) -> str:passclass Espresso(Beverage):"""浓缩咖啡"""def get_description(self) -> str:return "浓缩咖啡"def cost(self) -> float:return 1.99class HouseBlend(Beverage):"""综合咖啡"""def get_description(self) -> str:return "综合咖啡"def cost(self) -> float:return 0.89class DarkRoast(Beverage):"""深焙咖啡"""def get_description(self) -> str:return "深焙咖啡"def cost(self) -> float:return 0.99class Decaf(Beverage):"""低咖啡因"""def get_description(self) -> str:return "低咖啡因"def cost(self) -> float:return 1.05class Mocha(CondimentDecorator):"""摩卡"""def __init__(self, beverage: Beverage):self.beverage = beveragedef get_description(self) -> str:return self.beverage.get_description() + '+摩卡'def cost(self) -> float:return self.beverage.cost() + 0.2class Soy(CondimentDecorator):"""豆浆"""def __init__(self, beverage: Beverage):self.beverage = beveragedef get_description(self) -> str:return self.beverage.get_description() + '+豆浆'def cost(self) -> float:return self.beverage.cost() + 0.15class Whip(CondimentDecorator):"""奶泡"""def __init__(self, beverage: Beverage):self.beverage = beveragedef get_description(self) -> str:return self.beverage.get_description() + '+奶泡'def cost(self) -> float:return self.beverage.cost() + 0.1class Milk(CondimentDecorator):"""牛奶"""def __init__(self, beverage: Beverage):self.beverage = beveragedef get_description(self) -> str:return self.beverage.get_description() + '+牛奶'def cost(self) -> float:return self.beverage.cost() + 0.1if __name__ == '__main__':beverage = Espresso()print(f"{beverage.get_description()}:${beverage.cost()}")beverage2 = DarkRoast()beverage2 = Mocha(beverage2)beverage2 = Mocha(beverage2)beverage2 = Whip(beverage2)print(f"{beverage2.get_description()}:${beverage2.cost()}")beverage3 = HouseBlend()beverage3 = Soy(beverage3)beverage3 = Mocha(beverage3)beverage3 = Whip(beverage3)print(f"{beverage3.get_description()}:${beverage3.cost()}")"""运行结果:
浓缩咖啡:$1.99
深焙咖啡+摩卡+摩卡+奶泡:$1.49
综合咖啡+豆浆+摩卡+奶泡:$1.34
"""

总结

在这里插入图片描述

版权声明:

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

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

热搜词