Python设计模式之模板方法模式实例详解

1、模板方法模式定义

定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤。
子类实现的具体方法叫作基本方法,实现对基本方法高度的框架方法,叫作模板方法。

2、模板方法模式的优点

可变的部分可以充分扩展,不变的步骤可以充分封装;
提取公共代码,减少冗余代码,便于维护;
具体过程可以定制,总体流程方便掌控;
使用模板方法可以将代码的复用最大化;
子类只需要实现自己的方法,将算法和实现的耦合降低。

3、模板方法模式的使用场景

子类中有公有的方法,并且逻辑基本相同,可以使用模板模式。

4、模板方法模式的缺点

在抽象类中定义了子类的方法,即子类对父类产生了影响,部分影响了代码的可读性。

5、举例说明

未使用模板模式:

class TestPaperA(object):def question(self):print("题目")def answer(self):print('答案A')class TestPaperB(object):def question(self):print("题目")def answer(self):print('答案B')if __name__ == '__main__':print("试卷1")t1 = TestPaperA()t1.question()t1.answer()print("+++++++++++++++++++++++")print("试卷2")t2 = TestPaperB()t2.question()t2.answer()

结果:

试卷1
题目
答案A
+++++++++++++++++++++++
试卷2
题目
答案B

使用模板模式,提取公共函数:

class NewPaper(object):def question(self):print("题目")class TestPaperA(NewPaper):def question(self):print("题目")def answer(self):print('答案A')class TestPaperB(NewPaper):def question(self):print("题目")def answer(self):print('答案B')if __name__ == '__main__':print("试卷1")t1 = TestPaperA()t1.question()t1.answer()print("+++++++++++++++++++++++")print("试卷2")t2 = TestPaperB()t2.question()t2.answer()

结果:

试卷1
题目
答案A
+++++++++++++++++++++++
试卷2
题目
答案B

6、模板模式结构说明

NewPaper是抽象类,定义抽象模板并实现了抽象模板方法,TestPaper实现父类的一个或多个抽象方法。

当不变和可变的行为在子类的方法中混合在一起时,不变的行为就会在子类中重复出现,通过模板方法模式把这些行为搬到单一的地方,帮助子类摆脱重复的不变行为的纠缠。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小米2s自带rec刷root_刷Magisk模块开机卡Logo了怎么办?两种方法教你轻松解决

虽然,Magisk由于工作原理的不同,其模块对系统的兼容性相比较于此前的Xposed框架模块要好得多,但是依旧有可能出现刷了模块之后,卡Logo,无法开机的情况。今天,小编就提供两种方式解决刷Magisk模块卡开机Logo…

proteus如何添加stm32_电路仿真软件详谈(六),Proteus电路仿真软件的超级应用

一款优秀的电路仿真软件,可帮助用户更好实现相应功能,而Proteus电路仿真软件便是这样一款利器。本文中,将讲解基于Proteus电路仿真软件的SPI接口的设计与实现。通过本文,希望大家对Proteus电路仿真软件的应用具备深层次的理解。1、…

LeetCode 803. 打砖块(并查集)

文章目录1. 题目2. 解题1. 题目 有一个 m x n 的二元网格,其中 1 表示砖块,0 表示空白。 砖块 稳定(不会掉落)的前提是: 一块砖直接连接到网格的顶部,或者至少有一块相邻(4 个方向之一&#x…

python设计模式之享元模式

一、享元模式定义: 享元模式是一种用于解决资源和性能压力时会使用到的设计模式,它的核心思想是通过引入数据共享来提升性能。 在开发3D游戏时,例如有成千上万的士兵或者有成千上万棵树,如果一个3D地带的每个对象都单独创建&…

allegro多版本安装_Homebrew 安装旧版本软件包马克

大家好我叫乌图米,我会在这里陆续跟大家分享一些有的没的数码体验、软件技巧、系统知识,欢迎大家留言与我交流~如果你喜欢文章的内容,可以在文末点个赞 ,你的支持就是我最大的动力 !这篇文章介绍一下 Homeb…

利用Python实现PDF转文本,就是如此简单!

一、前言 对很多人来说,将PDF转换为可编辑的文本是个刚需,却苦于没有简单的方法。发现 pdf 幻灯片,效果还不错。 传统的讲座通常伴随有很多pdf幻灯片。一般来说,想要对自己的讲座做笔记,需要从pdf复制、补充大量内容…

LeetCode 1725. 可以形成最大正方形的矩形数目

文章目录1. 题目2. 解题1. 题目 给你一个数组 rectangles &#xff0c;其中 rectangles[i] [li, wi] 表示第 i 个矩形的长度为 li 、宽度为 wi 。 如果存在 k 同时满足 k < li 和 k < wi &#xff0c;就可以将第 i 个矩形切成边长为 k 的正方形。 例如&#xff0c;矩形…

Python实现给指定的微信朋友发信息

一、环境准备 1、Python3.6 2、itchat第三方库 pip install itchat-uos 3、pyinstaller第三方库 pip install pyinstaller 二、核心代码 import itchatimport timeprint("请扫描弹出的扫二维码")itchat.auto_login(hotReloadTrue)boom_name input("请输…

LeetCode 1726. 同积元组(排列组合)

文章目录1. 题目2. 解题1. 题目 给你一个由 不同 正整数组成的数组 nums &#xff0c;请你返回满足 a * b c * d 的元组 (a, b, c, d) 的数量。其中 a、b、c 和 d 都是 nums 中的元素&#xff0c;且 a ! b ! c ! d 。 示例 1&#xff1a; 输入&#xff1a;nums [2,3,4,6] 输…

vuedraggle choose_如何拆分员工工资条,教你一招一学就会。(五)函数CHOOSE

作为人事管理者&#xff0c;我们最重要的一个工作就是工资表&#xff0c;那么如何将工资表拆分成工资条呢&#xff1f;我们最后看一下函数CHOOSE对函数MOD、ROW、OFFSET 、INT的嵌套使用。第一步&#xff0c;我们输入函数CHOOSE&#xff0c;第一个值是序号&#xff0c;我们将之…

用pythone画棵圣诞树,祝大家圣诞快乐

一、python环境&#xff1a; 根据电脑的情况去下载对应的python安装包&#xff0c;我使用的是python3.7.0的版本 二、python编译器&#xff1a; 打开pycharm&#xff0c;然后我们创建一个project&#xff0c;在project下创建一个python file&#xff0c;建议取名字不要使用中…

LeetCode 1727. 重新排列后的最大子矩阵(前缀和+排序)

文章目录1. 题目2. 解题1. 题目 给你一个二进制矩阵 matrix &#xff0c;它的大小为 m x n &#xff0c;你可以将 matrix 中的 列 按任意顺序重新排列。 请你返回最优方案下将 matrix 重新排列后&#xff0c;全是 1 的子矩阵面积。 示例 1&#xff1a; 输入&#xff1a;ma…

亚马逊出的平板电脑_亚马逊Fire HD 8 Plus评测:适合看视频和轻度游戏的廉价平板...

导语&#xff1a;近日&#xff0c;亚马逊升级了旗下的Fire HD 8和Fire HD 8 Plus平板电脑&#xff0c;使其具有更多的内存&#xff0c;更快的处理器和USB-C充电功能。亚马逊Fire HD 8 Plus是Fire HD 8 的一个增强版本&#xff0c;它提供了较HD8更快的速度&#xff0c;拥有一些通…

利用python转换图片格式

前言 常见的图像任务通常需要把照片统一成相同的格式&#xff0c;所以此文章正是为了统一格式而生&#xff0c;常见的主要有cv2和PIL.Image的相关操作&#xff0c;照片格式是一串数字加上后缀名 工具一&#xff1a;cv2 pip install opencv-python 之后就可以 import cv2 1.…

苹果台式机_苹果史上最强台式机来了:顶配售价45万

12月11日消息&#xff0c;国行版Mac Pro正式在苹果官网上架开售。根据苹果官网显示&#xff0c;Mac Pro最基础版本需要花费47999元&#xff0c;基础版Mac Pro配置上采用3.5GHz 8核Intel Xeon W处理器&#xff0c;32GB (4x8GB) DDR4 ECC内存&#xff0c;Radeon Pro 580X图形处理…

LeetCode 1489. 找到最小生成树里的关键边和伪关键边(并查集+kruskal最小生成树)

文章目录1. 题目2. 解题1. 题目 给你一个 n 个点的带权无向连通图&#xff0c;节点编号为 0 到 n-1 &#xff0c;同时还有一个数组 edges &#xff0c;其中 edges[i] [fromi, toi, weighti] 表示在 fromi 和 toi 节点之间有一条带权无向边。 最小生成树 (MST) 是给定图中边的…

斯特林发动机图纸尺寸_南昌教学模型订做,航空发动机模型_境海模型

首页 > 新闻中心发布时间&#xff1a;2020-11-08 13:57:07 导读&#xff1a;境海模型为您提供南昌教学模型订做,航空发动机模型的相关知识与详情&#xff1a; 曾经的沙盘模型一般只有模型自身&#xff0c;没有现代的视觉作用例如&#xff1a;灯火声音形象等动态的作用。景观…

app inventor离线版_小鸡漫画app手机版下载_小鸡漫画好看的漫画手机版下载

小鸡漫画app手机版&#xff0c;是一款无限量看漫画的阅读软件。小鸡漫画app手机版为喜欢看漫画的用户带来超多好看、热门、经典的漫画集&#xff0c;在这里看漫画没有乱七八糟和漫画无关的东西打扰。小鸡漫画app手机版方便看漫画&#xff0c;让一个人的你不再孤单&#xff0c;午…

LeetCode 963. 最小面积矩形 II

文章目录1. 题目2. 解题1. 题目 给定在 xy 平面上的一组点&#xff0c;确定由这些点组成的任何矩形的最小面积&#xff0c;其中矩形的边不一定平行于 x 轴和 y 轴。 如果没有任何矩形&#xff0c;就返回 0。 示例 1&#xff1a; 输入&#xff1a;[[1,2],[2,1],[1,0],[0,1]…

树的存储结构(树的二叉链表(孩子—兄弟))

// c6-5.h 树的二叉链表(孩子—兄弟)存储结构(见图6.32) typedef struct CSNode {TElemType data;CSNode *firstchild,*nextsibling; }CSNode,*CSTree; 一棵树无论有多少叉&#xff0c;它最多有一个长子和一个排序恰在其下的兄弟。根据这样的定 义&#xff0c;则每个结点的结构…