当前位置: 首页 > 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://www.lqws.cn/news/69265.html

相关文章:

  • Spring Security入门:创建第一个安全REST端点项目
  • 好用的C/C++/嵌入式 IDE: CLion的下载安装教程(保姆级教程)
  • 黑马Java面试笔记之 微服务篇(SpringCloud)
  • 【图论 拓扑排序 贪心 临项交换】P5603 小 C 与桌游 题解|普及+
  • XML-BEANS compiled schema: Could not locate compiled schema resource
  • Day43打卡(补41+42) @浙大疏锦行
  • 123网盘SDK-npm包已发布
  • 电脑为什么换个ip就上不了网了
  • BiliNote部署实践
  • postman工具使用
  • Kotlin 中 companion object 扩展函数详解
  • Kotlin 中companion object {} 什么时候触发
  • 【iOS安全】使用LLDB调试iOS App | LLDB基本架构 | LLDB安装和配置
  • Flask+LayUI开发手记(七):头像的上传及突破static目录限制
  • AI来敲门:我们该如何与焦虑共舞
  • 【Linux】Git原理与使用
  • pbootcms 搜索自定义字段模糊、精准搜索
  • Hadoop 大数据启蒙:深入解析分布式基石 HDFS
  • 使用免费wordpress成品网站模板需要注意点什么
  • Go 语言 + Word 文档模板:WordZero 引擎如何让企业文档处理效率提升 300%?
  • vulnyx loweb writeup
  • 云计算数据治理
  • Linux学习笔记:shell脚本篇(1)
  • 排序算法——详解
  • Nuxt3部署
  • 前端自动化测试利器:Playwright 全面介绍
  • 从0开始学习R语言--Day15--非参数检验
  • Origin将杂乱的分组散点图升级为美观的带颜色映射的气泡图
  • Qt OpenGL 相机实现
  • 《深入解析SPI协议及其FPGA高效实现》-- 第二篇:SPI控制器FPGA架构设计