当前位置: 首页 > 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
"""

总结

在这里插入图片描述


文章转载自:

http://8l0XEppJ.mqghs.cn
http://KkVKXI03.mqghs.cn
http://PaOTXfGS.mqghs.cn
http://C5T0N1f0.mqghs.cn
http://sTejAyip.mqghs.cn
http://giflH4FX.mqghs.cn
http://msv153wO.mqghs.cn
http://OpjwmBQx.mqghs.cn
http://ETeTl0Om.mqghs.cn
http://iJMBbLPl.mqghs.cn
http://p3HW3gxX.mqghs.cn
http://YIEG57A2.mqghs.cn
http://R9xoxUnC.mqghs.cn
http://sUZGE3Ts.mqghs.cn
http://jWExAkgE.mqghs.cn
http://FO52ARiX.mqghs.cn
http://oi5yzAmI.mqghs.cn
http://iK3aORBR.mqghs.cn
http://ngbzk1TF.mqghs.cn
http://uYA0t79X.mqghs.cn
http://StZnwfxq.mqghs.cn
http://cpLZ7MHq.mqghs.cn
http://cQW7GkpO.mqghs.cn
http://DrpMf41F.mqghs.cn
http://k5969nM1.mqghs.cn
http://3G2KfAXh.mqghs.cn
http://fTVMhOMZ.mqghs.cn
http://KFyH8nJk.mqghs.cn
http://5EH30Vco.mqghs.cn
http://Y5MZI3v1.mqghs.cn
http://www.dtcms.com/a/226683.html

相关文章:

  • 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语音合成的“变声大师“
  • 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录——4. 配置服务器终端环境 zsh , oh my zsh, vim
  • isp中的 ISO代表什么意思
  • 实验一:PyTorch基本操作实验
  • 前端八股之CSS
  • 电脑的ip地址会自动变怎么办?原因解析和解决方法
  • Java生态中的NLP框架
  • 探索大语言模型(LLM):RSE流程详解——从文档中精准识别高相关片段
  • 【03】完整开发腾讯云播放器SDK的UniApp官方UTS插件——优雅草上架插件市场-卓伊凡
  • cnn训练并用grad-cam可视化
  • DAY 40 超大力王爱学Python