当前位置: 首页 > news >正文

基于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
"""

总结

在这里插入图片描述

相关文章:

  • Android基于LiquidFun引擎实现软体碰撞效果
  • leetcode hot100刷题日记——35.子集
  • day17 leetcode-hot100-34(链表13)
  • 每日算法刷题计划Day20 6.2:leetcode二分答案3道题,用时1h20min
  • 从 LeetCode 到日志匹配:一行 Swift 实现规则识别
  • 力扣LeetBook数组和字符串--数组简介
  • 【软件测试】web自动化:Pycharm+Selenium+Firefox(一)
  • NodeJS全栈WEB3面试题——P8项目实战类问题(偏全栈)
  • 电脑wifi显示已禁用怎么点都无法启用
  • Java线程生命周期详解
  • GStreamer开发笔记(六):gstreamer基本概念:组件、箱柜、管道、衬垫、链接组件
  • 【存储基础】存储设备和服务器的关系和区别
  • 4、ubuntu系统 | 文本和目录操作函数
  • 设备驱动与文件系统:03 生磁盘的使用
  • Python 训练营打卡 Day 33-神经网络
  • SpringMVC的注解
  • Java设计模式之备忘录模式详解
  • 【小沐杂货铺】基于Three.JS构建IFC模型浏览器(WebGL、CAD、Revit、IFC)
  • 使用source ~/.bashrc修改环境变量之后,关闭服务器,在重启,环境变量还有吗?
  • Spark-TTS: AI语音合成的“变声大师“
  • ssh框架做音乐网站/推广官网
  • 电商设计网站模板/在线培训网站次要关键词
  • 日本做a爱片视频网站/网上怎么推广产品
  • 网站建设属于什么行业/优化公司结构
  • 画册设计制作/seo技术有哪些
  • 网站开发什么是会话/产品营销推广策略