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实现父类的一个或多个抽象方法。
当不变和可变的行为在子类的方法中混合在一起时,不变的行为就会在子类中重复出现,通过模板方法模式把这些行为搬到单一的地方,帮助子类摆脱重复的不变行为的纠缠。
Python设计模式之模板方法模式实例详解相关推荐
- python中代理模式分为几种_Python设计模式之代理模式实例详解
本文实例讲述了Python设计模式之代理模式.分享给大家供大家参考,具体如下: 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 #!/usr/bin/env py ...
- python类是实例的工厂_Python设计模式之工厂方法模式实例详解
本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...
- python如何做散点图-matplotlib在python上绘制3D散点图实例详解
大家可以先参考官方演示文档: 效果图: ''' ============== 3D scatterplot ============== Demonstration of a basic scatte ...
- python画三维温度散点图-matplotlib在python上绘制3D散点图实例详解
大家可以先参考官方演示文档: 效果图: ''' ============== 3D scatterplot ============== Demonstration of a basic scatte ...
- python绘制散点图-matplotlib在python上绘制3D散点图实例详解
大家可以先参考官方演示文档: 效果图: ''' ============== 3D scatterplot ============== Demonstration of a basic scatte ...
- python医学图像读取_对python读取CT医学图像的实例详解
需要安装OpenCV和SimpleItk. SimpleItk比较简单,直接pip install SimpleItk即可. 代码如下: #coding:utf-8 import SimpleITK ...
- python绘制3d坐标轴_matplotlib在python上绘制3D散点图实例详解
大家可以先参考官方演示文档: 效果图: ''' ============== 3D scatterplot ============== Demonstration of a basic scatte ...
- python rpc_对python调用RPC接口的实例详解
要调用RPC接口,python提供了一个框架grpc,这是google开源的 rpc相关文档: 需要安装的python包如下: 1.grpc安装 pip install grpcio 2.grpc的p ...
- python动态显示进度条_实例详解python如何轻松实现动态进度条
本次的这篇文章主要是和大家分享了关于实例详解python如何轻松实现动态进度条,有需要的小伙伴可以看一下 思路及讲解 假设有一个1000000数据的列表(为了让进度条可以显示出来,很大的数据),我们每 ...
最新文章
- python写入html文件带样式,使用pandas将数据帧写入html时应用样式映射
- 小程序 data-***自定义
- 11--MySQL数据查询应用(实战)(二)
- 循环神经网络 (RNN)
- boost::python::register_ptr_to_python相关的测试程序
- 「SVN」Ubuntu 版本库搭建+使用 完整教程
- 分类与数值预测是预测问题的两种主要类型
- 两年质保,只此一加!一加9系列推出两年质保
- 20年的老程序员对新入行的朋友的一些建议
- mysql 1045 拒绝远程链接
- TCPIP详解Protocol 读书笔记(一) TCP协议概述
- Pygame安装方法(Windows10, Python-3.7.2)
- bp神经网络训练样本个数,bp神经网络训练时间
- webmax的3DMAX导出插件下载
- 手机中的com.android.provision删除可不可以,Android Provision (Setup Wizard)
- Win10以太网网络电缆被拔出怎么解决
- 会员营销中,数字会员模式如何打造差异化会员服务
- 2018个人面试记录
- 前端项目如何向一个后端项目传递数组?(批量删除如何传参)
- 知道swift为什么是面向协议编程么?不知道,还不快来学习!