avatar

刘刚刚的blog

每一次迭代都让我们更接近最优

  • 首页
  • python
  • 大模型应用
  • 软件/工具导航页
  • 关于
主页 HeadFirst 设计模式--模板方法模式(Template Method)
文章

HeadFirst 设计模式--模板方法模式(Template Method)

发表于 2022-12-26 更新于 2024-09- 27
作者 Administrator
4~6 分钟 阅读

模板方法模式(Template Method)

模板方法模式通过再一个方法中定义一个骨架,而将一些步骤延迟到子类中定义。模板方法使得子类可以再不改变算法结构的情况下,重新定义算法中的某些步骤。

示例

在书中,通过咖啡和茶的制作过程介绍了模板方法模式

# 正常情况的实现
class Coffee:

    def prepare_recipe(self):
        self.boil_water()
        self.brew_coffee_grinds()
        self.pour_in_cup()
        self.add_sugar_and_milk()

    def boil_water(self):
        print("煮水")

    def brew_coffee_grinds(self):
        print("将咖啡通过滤网倒入")

    def pour_in_cup(self):
        print("倒入杯子")

    def add_sugar_and_milk(self):
        print("加糖和牛奶")


class Tea:

    def prepare_recipe(self):
        self.boil_water()
        self.steep_tea_bag()
        self.pour_in_cup()
        self.add_lemon()

    def boil_water(self):
        print("煮水")

    def steep_tea_bag(self):
        print("泡茶包")

    def pour_in_cup(self):
        print("倒入杯子")

    def add_lemon(self):
        print("添加柠檬")

# 通过模板方法实现
from abc import ABC, abstractmethod


class CaffeineBeverage(ABC):

    def prepare_recipe(self):
        self.boil_water()
        self.brew()
        self.pour_in_cup()
        self.add_condiments()

    def boil_water(self):
        print("煮水")

    def pour_in_cup(self):
        print("倒入杯子")

    @abstractmethod
    def brew(self):
        pass

    @abstractmethod
    def add_condiments(self):
        pass


class Coffee(CaffeineBeverage):

    def brew(self):
        print("将咖啡通过滤网倒入")

    def add_condiments(self):
        print("加糖和牛奶")


class Tea(CaffeineBeverage):

    def brew(self):
        print("泡茶包")

    def add_condiments(self):
        print("添加柠檬")

设计原则:好莱坞原则

原则:别调用我们,我们会调用你。

通过该原则,可以防止低层组件与高层组件的相互依赖。

与策略模式的比较

策略模式使用组合实现了方法的灵活调用,及在使用过程中的灵活改变。

而模板方法模式是通过继承实现的。

许可协议:  CC BY 4.0 123
分享

相关文章

下一篇

HeadFirst 设计模式--命令模式

上一篇

vmware硬盘占用过大的处理

最近更新

  • linux效率软件
  • 个人在vibe coding中的常用提示词梳理
  • Conda cpu占用100%的排查
  • Python工程中的一些工具
  • go中的包管理

热门标签

Halo agent vibe coding 运维 postgresql 设计模式 linux就该这么学 nas rag odoo

目录

©2026 刘刚刚的blog. 保留部分权利。

使用 Halo 主题 Chirpy