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()
  • 适用场景:
    • 一次性实现一个算法的不变的部分
    • 各个子类中的公共行为应该被提取出来并集中到一个公共父类中以避免代码重复
    • 控制子类扩展
相关推荐
老孟说禅9 小时前
自动化测试实战(二)
python
2601_967987379 小时前
你们都用Python实现了哪些自动化办公?
python·excel·自动化办公·1024程序员节·学习资料·跨平台操作
wflynn9 小时前
GitHub 今日推荐|Snapintosh:用 ARM EL2 监控器骗过内核,让骁龙芯片笔记本跑 macOS
python·开源·github
happylifetree9 小时前
Python69:核心语法-函数进阶-案例1(递归)
python
外收内放9 小时前
FastAPI猜字谜实战(3):把每一局存成JSON
开发语言·python·学习·json·fastapi
小白学大数据9 小时前
基于 Python 的家具消费数据分析全链路实战:从数据治理到销售预测
人工智能·python·数据分析
镜子AI9 小时前
镜子AI案例工程复盘:用Python给GEO效果做抽样检测与置信区间估计
开发语言·人工智能·python
WenGyyyL9 小时前
从零理解强化学习:为什么 AI 需要 Advantage,而不只是 Reward?
人工智能·python·深度学习·机器学习·nlp
春涧草茶9 小时前
慢就是快15-1 多进程 多线程
开发语言·python
云和数据.ChenGuang10 小时前
Python 集合(set)常用函数详解与实战案例
开发语言·python·深度学习·langchain