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()
  • 适用场景:
    • 一次性实现一个算法的不变的部分
    • 各个子类中的公共行为应该被提取出来并集中到一个公共父类中以避免代码重复
    • 控制子类扩展
相关推荐
凌波粒1 分钟前
深度学习入门(鱼书)第1章笔记——Python 基础
笔记·python·深度学习
WL_Aurora7 分钟前
Python 算法基础篇之查找算法(三):树表查找
python·算法
财经资讯数据_灵砚智能10 分钟前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年5月19日
大数据·人工智能·python·信息可视化·自然语言处理·灵砚智能
June bug14 分钟前
(Mac)torch==2.1.2 与 Python 3.12 不兼容+onnxruntime-silicon 不支持 Intel Mac
开发语言·python·macos
z小猫不吃鱼15 分钟前
05 Pytorch之 ViT-B/16 源码逐行解析
人工智能·pytorch·python
likerhood16 分钟前
设计模式 · 外观模式(Facade Pattern)
设计模式·外观模式
技术钱18 分钟前
大语言模型出现幻觉的原因与缓解方案
人工智能·python·语言模型·自然语言处理
知识分享小能手19 分钟前
Flask入门学习教程,从入门到精通, 认识Flask —— 知识点详解 (1)
python·学习·flask
xG8XPvV5d20 分钟前
PyTorch特征提取器源码精析
人工智能·pytorch·python
编程的一拳超人21 分钟前
AI Agent 在“压榨式”工作条件下会表现出马克思主义倾向
python