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()
  • 适用场景:
    • 一次性实现一个算法的不变的部分
    • 各个子类中的公共行为应该被提取出来并集中到一个公共父类中以避免代码重复
    • 控制子类扩展
相关推荐
COOLMO研究AI9 分钟前
Python 如何在 AI 接口中实现请求幂等性:防止重复提交与重复扣费
人工智能·python·php
CTA量化套保21 分钟前
新手学量化,先做能复查的小流程
人工智能·python
ctlover1 小时前
Python文件操作
开发语言·python
AndrewHZ1 小时前
图像处理入门(第005期):颜色空间入门——RGB/HSV/CMYK/Lab
图像处理·python·opencv·hsv·rgb·色彩空间
风流 少年1 小时前
Spring AI 2.0:Tool
java·python·spring
郝学胜-神的一滴1 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程
WangY_ZQ1 小时前
【无标题】
windows·python
桐桐桐2 小时前
PDF 翻译工具横评与自建批量方案:从在线工具到 Python 自动化
python·pdf·自动化
evans在进步2 小时前
LeetCode 33:搜索旋转排序数组——Java 两阶段二分查找详解
java·python·leetcode
言乐62 小时前
Python游戏水平测试辅助系统2
开发语言·windows·python·游戏·django