14.python设计模式【模板方法模式】

  • 内容:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法某特定步骤。

  • 角色:

    • 抽象类(AbstractClass):定义抽象的原子操作(钩子操作);实现一个模板方法作为算法的骨架。
    • 具体类(ConcreteClass):实现原子操作
  • UML图:

  • 举个例子:

    需求:一个运行窗口的指令,用户可以自己定义细节,运行指令让模板定死

python 复制代码
from abc import ABCMeta,abstractmethod
from time import sleep

class Window(metaclass=ABCMeta):
    @abstractmethod
    def start(self):
        pass

    @abstractmethod
    def repaint(self):
        pass

    @abstractmethod
    def stop(self): # 原子操作/钩子操作
        pass

    def run(self): # 模板框架
        self.start()
        while True:
            try:
                self.repaint()
                sleep(1)
            except KeyboardInterrupt:
                break
        self.stop()

class MyWindow(Window):
    def __init__(self,msg):
        self.msg=msg

    def start(self):
        print("窗口已经打开")

    def repaint(self):
        print(self.msg)

    def stop(self):
        print("窗口结束运行")

MyWindow("Hello....").run()
  • 适用场景:
    • 一次性实现一个算法的不变的部分
    • 各个子类中的公共行为应该被提取出来并集中到一个公共父类中以避免代码重复
    • 控制子类扩展
相关推荐
CodeCraft Studio39 分钟前
Excel处理控件Aspose.Cells教程:使用 Python 在 Excel 中创建甘特图
python·excel·项目管理·甘特图·aspose·aspose.cells
GIS之路2 小时前
GeoTools 基础概念解析
数据库·设计模式·oracle
SaleCoder2 小时前
用Python构建机器学习模型预测股票趋势:从数据到部署的实战指南
开发语言·python·机器学习·python股票预测·lstm股票模型·机器学习股票趋势
归云鹤6 小时前
设计模式二:策略模式 (Strategy Pattern)
设计模式·策略模式
玩代码7 小时前
备忘录设计模式
java·开发语言·设计模式·备忘录设计模式
技术猿188702783518 小时前
实现“micro 关键字搜索全覆盖商品”并通过 API 接口提供实时数据(一个方法)
开发语言·网络·python·深度学习·测试工具
烛阴8 小时前
为什么你的Python项目总是混乱?层级包构建全解析
前端·python
三金C_C8 小时前
asyncio 与 uvloop
python·异步·asyncio
放飞自我的Coder8 小时前
【colab 使用uv创建一个新的python版本运行】
开发语言·python·uv
黎茗Dawn9 小时前
连接new服务器注意事项
linux·python