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

基于Python学习《Head First设计模式》第八章 模板方法模式

项目:星巴兹咖啡和茶

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

代码实现

在这里插入图片描述

from abc import abstractmethodclass CaffeineBeverage:"""咖啡饮料"""def prepare_recipe(self):self.boil_water()self.brew()self.pour_in_cup()self.add_condiments()def boil_water(self):print('将水煮沸')@abstractmethoddef brew(self):print('浸泡或冲泡')def pour_in_cup(self):print('倒入杯子')@abstractmethoddef add_condiments(self):print('添加调料')class Tea(CaffeineBeverage):def brew(self):print('浸泡茶叶')def add_condiments(self):print('添加柠檬')class Coffee(CaffeineBeverage):def brew(self):print('冲泡咖啡')def add_condiments(self):print('添加奶和糖')if __name__ == '__main__':tea = Tea()tea.prepare_recipe()print()coffee = Coffee()coffee.prepare_recipe()"""运行结果:
将水煮沸
浸泡茶叶
倒入杯子
添加柠檬将水煮沸
冲泡咖啡
倒入杯子
添加奶和糖
"""

认识模板方法

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

模板方法定义

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

挂钩模板方法

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

代码实现钩子模板方法

在这里插入图片描述


from abc import abstractmethodclass CaffeineBeverageWithHook:"""咖啡饮料"""def prepare_recipe(self):self.boil_water()self.brew()self.pour_in_cup()if self.customer_wants_condiments():self.add_condiments()def boil_water(self):print('将水煮沸')@abstractmethoddef brew(self):print('浸泡或冲泡')def pour_in_cup(self):print('倒入杯子')@abstractmethoddef add_condiments(self):print('添加调料')def customer_wants_condiments(self):return Trueclass TeaHook(CaffeineBeverageWithHook):def brew(self):print('浸泡茶叶')def add_condiments(self):print('添加柠檬')class CoffeeWithHook(CaffeineBeverageWithHook):def brew(self):print('冲泡咖啡')def add_condiments(self):print('添加奶和糖')def get_user_input(self):answer = input('Would you like milk and sugar with your coffe? (y/n)')return 'no' if not answer else answerdef customer_wants_condiments(self):answer = self.get_user_input()if answer.lower().startswith('y'):return Truereturn Falseif __name__ == '__main__':tea_hook = TeaHook()coffee_hook = CoffeeWithHook()print('制作茶...')tea_hook.prepare_recipe()print('\n制作咖啡...')coffee_hook.prepare_recipe()"""运行结果:
制作茶...
将水煮沸
浸泡茶叶
倒入杯子
添加柠檬制作咖啡...
将水煮沸
冲泡咖啡
倒入杯子
Would you like milk and sugar with your coffe? (y/n)y
添加奶和糖
"""

设计要点

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

总结

在这里插入图片描述

http://www.xdnf.cn/news/12563.html

相关文章:

  • Readest(电子书阅读器) v0.9.53
  • 缓存一致性 与 执行流
  • STM32学习笔记:外部中断(EXTI)原理与应用详解
  • 什么是可恢复保险丝
  • 永恒之蓝(CVE-2017-0146)详细复现
  • day49 python 注意力热图
  • Oracle 客户端深度指南:SQL Developer 与 PL/SQL Developer 全面安装使用教程
  • MySQL中的内置函数
  • 深入剖析Nginx:从入门到高并发架构实战
  • day24 元组和OS模块
  • 十、【ESP32开发全栈指南: TCP客户端】
  • LinkedList、Vector、Set
  • 嵌入式学习笔记 - freeRTOS vTaskPlaceOnEventList()函数解析
  • VirtualBox启动失败@Ubuntu22.04 说是配置文件有问题
  • 使用ORM Bee (ormbee) ,如何利用SQLAlchemy的模型生成数据库表.
  • “组件、路由懒加载”,在 Vue3 和 React 中分别如何实现? (copy)
  • 使用Python和Flask构建简单的机器学习API
  • MySQL事务与锁中的MVCC 深度解析与面试题讲解
  • Spring AI 核心工作流
  • 每日Prompt:治愈动漫插画
  • 基于深度学习的金枪鱼各类别目标检测含完整数据集
  • Strong Baseline: Multi-UAV Tracking via YOLOv12 with BoT-SORT-ReID 2025最新无人机跟踪
  • 【C/C++】实现固定地址函数调用
  • 2种官方方法关闭Windows防火墙
  • iOS、Android、鸿蒙、Web、桌面 多端开发框架Kotlin Multiplatform
  • 将单体架构项目拆分成微服务时的两种工程结构
  • 阿里云MaxCompute入门
  • 堆排序的详细解读
  • 5.3.2_2二叉树的线索化
  • 物联网协议之MQTT(二)服务端