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

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

  • 角色:

    • 抽象类(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.ppmy.cn/news/986015.html

相关文章

安全初级—正则表达式、This关键字、闭包

文章目录 正则表达式字面量字符元字符转义符特殊字符字符类预定义模式重复类量词符贪婪模式修饰符 This关键字使用场合使用注意点避免多层 this避免数组处理方法中的 this避免回调函数中的 this 绑定 this 的方法Function.prototype.call()Function.prototype.apply()Function.…

解决Spring循环依赖

当我们使用Spring框架构建应用程序时,循环依赖是一个常见的问题。循环依赖指的是两个或多个Bean之间相互依赖,形成了一个循环的依赖关系。在这篇博客中,我们将深入探讨Spring循环依赖的原理,包括原因、解决方案和示例代码。 什么…

内存函数讲解

&#x1f495;"痛苦难以避免&#xff0c;而磨难可以选择。"-->村上春树&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;数据在内存中的存储 内存函数就是管理内存数据的函数&#xff0c;包含于头文件<string.h>中 1.memcpy函数-->内存…

[check-update] get changed dataId error, code_ 403

这个异常主要是nacos开启了密码认证,然后项目缺少一些相应的配置。 解决方案&#xff1a; bootstrap.properties文件加上如下配置&#xff1a; spring.cloud.nacos.usernamenacos spring.cloud.nacos.passwordnacosyml配置文件也加上对应的账号和密码。

VUE中使用ElementUI组件的单选按钮el-radio-button实现第二点击时取消选择的功能

页面样式为&#xff1a; html 代码为&#xff1a; 日志等级&#xff1a; <el-radio-group v-model"logLevel"><el-radio-button label"DEBUG" click.native.prevent"changeLogLevel(DEBUG)">DEBUG</el-radio-button><el-r…

【计算机网络】简易TCP网络小程序

文章目录 1. 简易TCP网络程序1.1 服务端1.1.1 服务端创建套接字1.1.2 服务端绑定1.1.3 服务端监听1.1.4 服务端获取连接1.1.5 服务端处理请求 1.2 客户端1.2.1 客户端创建套接字1.2.2 客户端连接服务器1.2.3 客户端发起请求 1.3 服务器测试1.4 单执行流服务器的弊端 2. 多进程版…

uniapp使用HQChart的k线,用webSocket更新数据

项目&#xff1a;不借用HQChart的各种接口数据&#xff0c;即数据后端返回&#xff0c;但是数据格式要和原数据格式一样。 //k线图 CreateHQChartKLine(){var chartHeightuni.upx2px(this.ChartHeight);let hqchartCtrlthis.$refs.HQChartCtrl;hqchartCtrl.KLine.Option.Type&…

ZQC的游戏 题解

前言 这题题意描述不是很清楚啊&#xff0c;所以我找了个有权限的人把题面改了改&#xff0c;应该还是比较清楚了。 感觉这道题挺妙的&#xff0c;就来写一篇题解。 思路 首先&#xff0c;根据贪心思想&#xff0c;我们会将 1 1 1 号点半径以内能吃的都吃了&#xff0c;假…