模板方法模式(python)

news/2025/2/12 9:23:29/

一、模式定义

1.模板方法模式(Template Method Pattern):定义一个操作中算法的框架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

2.模板方法是一种类行为型模式。

二、模式结构

模板方法模式包含如下角色:
1. AbstractClass(抽象类)
在抽象类中定义一系列基本操作(Primitive Operations),这些基本操作可以是具体的。也可以是抽象的,每一个基本操作对应算法的一个步骤,在其子类中可以重定义并实现一个算法的各个步骤。同时,在抽象类中实现了一个模板方法,用于定义一个算法的骨架,此模板方法不仅可以调用基本操作,还可以调用在抽象类中声明而在其子类中实现的抽象方法,当然也可以调用其他对象中的方法。
2.ConcreteClass(具体子类)
具体子类是抽象类的子类,用于实现在父类中定义的抽象基本操作以完成子类特定算法的步骤,也可以覆盖在父类中实现的具体基本操作。

三、例子

1. AbstractClass

# @Time    : 2022/11/29 16:41
# @Author  : ZQH
# @FileName: AbstractClass.py
# @Software: PyCharmfrom 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:self.stop()break

 2.ConcreteClass

# @Time    : 2022/11/29 16:41
# @Author  : ZQH
# @FileName: ConcreteClass.py
# @Software: PyCharmfrom AbstractClass import Windowclass MyWindow(Window):def __init__(self,msg):self.msg = msgdef start(self):print('窗口开始运行')def stop(self):print('窗口停止')def repaint(self):print(self.msg)

3.Client

from ConcreteClass import MyWindowif __name__ == '__main__':myWindow = MyWindow('hello')myWindow.run()

四、优缺点

1.模板方法模式的优点
(1) 模板方法模式在一个类中形式化地定义算法,而由它的子类实现细节的处理,模板方法模式的优势是在子类定义详细的处理算法时不会改变算法的结构。
(2) 模板方法模式是一种代码复用的基本技术,它在类库设计中尤为重要,它提取了类库中的公共行为,将公共行为放在父类中,而通过其子类来实现不同的行为。
(3) 模板方法模式提供了一种反向的控制结构,通过一个父类调用其子类的操作,通过对子类的扩展增加新的行为,符合“开闭原则”。


2.模板方法模式的缺点
每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象,但是更加符合“单一职责原则”,使得类的内聚性得以提高。


http://www.ppmy.cn/news/2382.html

相关文章

F12抓包简单案例

F12抓包原理:在电脑访问互联网之前,进行包录制 1.谷歌开发者工具(F12) 元素(Elements):页面元素查看分析,web自动化 控制台(Console):查看日志 来源&#xf…

行为管理(锐捷行业网关篇)

大家好,我是小杜。有了自学习和师傅指导这个“buff”,感觉自己的进步是“一日千里”啊! 今天来学习网关产品的行为管理相关的配置,咦,网关EG系列和睿易的NBR-E系列的路由器差不多啊,难道是“双胞胎”&#…

计算机组成大题分析(三)

假定计算机 M 字长为 16 位,按字节编址,连接 CPU 和主存的系统总线中地址线为 20 位、数据线为 8位,采用 16 位定长指今字,指令格式及其说明如下: 其中,op1-op3 为操作码,rs,t 和 rd 为通用寄存…

自定义正则表达式校验注解

1. 解释 自定义注解,通过正则表达式来校验请求相关参数,也可用于校验是否可空等 2. 自定义注解 1. Check 自定义Check 注解用来当做AOP切点 package net.lesscoding.aop;import java.lang.annotation.*;/*** author eleven* date 2022/11/30 11:56* des…

认知电子战 | 认知电子战简介

认知电子战简介 概念研究现状自适应电子战行为学习项目(BLADE,2010)自适应雷达对抗项目(ARC,2012)认知干扰机项目(CJ,2010)极端射频频谱条件下的通信项目(CommEx,2010)美国海军的认知电子战计划(2013)各项目进展情况系统组成认知侦察模块对抗措施合成模块智能干扰…

Ansys Lumerical | 行波马赫曾德尔调制器的仿真设计与优化

说明 本案例将Lumerical和HFSS在行波MZM调制器建模中的功能与optiSLang相结合,提供了强大的优化能力以寻找最佳性能设计。 下载 联系工作人员获取附件 综述 本案例建立在已有的硅波导建模实例(Ansys Lumerical 行波 Mach-Zehnder 调制器仿真分析&#x…

Leica Infinity三维映射环境数据

Leica Infinity三维映射环境数据 Leica Infinity是软件工程师和该领域专家的名字,以及您的工作计划信息。该软件被设计和呈现为一个强大的产品,并且来自六边形组。Leica Infinity产品的居民试图用新的眼光创造新的数据处理。使用此软件,您可以…

【2022秋线上作业-第六次-第13-15周】判断题+选择题

判断题 1.希尔排序是稳定的算法。 F 解析: 希尔排序是非稳定排序算法。 不稳定的排序算法:堆排序、快速排序、希尔排序、直接选择排序 稳定的排序算法:基数排序、冒泡排序、直接插入排序、折半排序、归并排序 2.在散列表中,所谓同…