当前位置: 首页 > news >正文

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

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

  • 角色:

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

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

from abc import ABCMeta,abstractmethod
from time import sleepclass Window(metaclass=ABCMeta):@abstractmethoddef start(self):pass@abstractmethoddef repaint(self):pass@abstractmethoddef stop(self): # 原子操作/钩子操作passdef run(self): # 模板框架self.start()while True:try:self.repaint()sleep(1)except KeyboardInterrupt:breakself.stop()class MyWindow(Window):def __init__(self,msg):self.msg=msgdef start(self):print("窗口已经打开")def repaint(self):print(self.msg)def stop(self):print("窗口结束运行")MyWindow("Hello....").run()
  • 适用场景:
    • 一次性实现一个算法的不变的部分
    • 各个子类中的公共行为应该被提取出来并集中到一个公共父类中以避免代码重复
    • 控制子类扩展
http://www.lryc.cn/news/103243.html

相关文章:

  • 谷粒商城第六天-实现功能的前序工作(网关的配置 跨域配置)
  • 为什么说国内数字孪生平台gis架构采用Cesium是不错的选择?
  • 前端面试的性能优化部分(1)每篇10题
  • GitLab备份升级
  • Matlab实现遗传算法仿真(附上40个仿真源码)
  • git使用(由浅到深)
  • NAT协议(网络地址转换协议)详解
  • pytorch(续周报(1))
  • el-table 树形结构数据 设置某一层,新增按钮不展示
  • 【Unity2D】粒子特效
  • 第九十六回 网络综合示例:获取天气信息
  • Shell中获取昨天和多天前日期
  • golang静态编译及编译失败排查步骤
  • 2023年7月第4周大模型荟萃
  • Meta分析的选题与文献计量分析CiteSpace应用丨R语言Meta分析【数据清洗、精美作图、回归分析、诊断分析、不确定性及贝叶斯应用】
  • vscode eslint配置
  • C++ 对象模型 C++ Object Model
  • leetcode做题笔记47
  • Linux Day04
  • 上海亚商投顾:沪指冲高回落 两市成交重回万亿
  • 2023最新版本~十分钟零基础搭建EMQX服务器
  • SpringBoot2.5.6整合Elasticsearch7.12.1
  • 准大一信息安全/网络空间安全专业学习规划
  • WEB:php_rce
  • 问题:idea启动项目错误提示【command line is too long. shorten command line】
  • xshell连接Windows中通过wsl安装的linux子系统-Ubuntu 22.04
  • 子域名收集工具OneForAll的安装与使用-Win
  • 报数游戏、
  • 规约模式:优雅设计与灵活应用
  • Ubuntu Server版 之 apache系列 安装、重启、开启,版本查看