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()
  • 适用场景:
    • 一次性实现一个算法的不变的部分
    • 各个子类中的公共行为应该被提取出来并集中到一个公共父类中以避免代码重复
    • 控制子类扩展
相关推荐
MediaTea15 分钟前
Scikit-learn:一个最小机器学习工作流示例
人工智能·python·机器学习·scikit-learn
qq_3493174818 分钟前
Layui如何修改表格单元格内文字的行间距
jvm·数据库·python
2301_7751481528 分钟前
Redis如何实现用户标签管理_利用Set结构存储唯一属性集合
jvm·数据库·python
m0_5964063732 分钟前
mysql如何配置审计日志输出_mysql audit_log_format设置
jvm·数据库·python
2301_8166602142 分钟前
Bootstrap框架的最小宽度限制是多少
jvm·数据库·python
水木流年追梦1 小时前
CodeTop Top 300 热门题目2-最长回文子串
开发语言·人工智能·python·算法·leetcode
狗都不学爬虫_1 小时前
小程序逆向 - Hai尔(AliV3拖动物品)
javascript·爬虫·python·网络爬虫
ximu_polaris1 小时前
设计模式(c++)-结构型模式-装饰器模式
c++·设计模式·装饰器模式
abc123456sdggfd1 小时前
HTML5中Vuex持久化插件中WebStorage的底层配置
jvm·数据库·python
小龙Guo1 小时前
Yolo 多任务推理,摄像头+视频实时推理,实现关键点、分割、检测等模型推理部署
python·yolo·关键点检测·模型推理