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


Posted in Python onJanuary 17, 2019

本文实例讲述了Python设计模式之模板方法模式。分享给大家供大家参考,具体如下:

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

下面是一个模板方法模式的一个demo:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大话设计模式
设计模式——模板方法模式
模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
使用场景:当不变和可变的行为在方法的子类实现中混合在一起时,不变的行为就会在子类中重复出现,用模板方法模式把这些不变的行为搬到单一的地方,帮助子类摆脱重复不变的行为纠缠
"""
class NewPaper(object):
  def question1(self):
    print "题目1"
    print self.answer1()
  def question2(self):
    print "题目2"
    print self.answer2()
  def answer1(self):
    return ''
  def answer2(self):
    return ''
class TestPaperA(NewPaper):
  def answer1(self):
    return '答案A1'
  def answer2(self):
    return '答案A2'
class TestPaperB(NewPaper):
  def answer1(self):
    return '答案B1'
  def answer2(self):
    return '答案B2'
if __name__ == '__main__':
  test1 = TestPaperA()
  test2 = TestPaperB()
  print "试卷A"
  test1.question1()
  test1.question2()
  print "试卷B"
  test2.question1()
  test2.question2()

运行结果:

试卷A
题目1
答案A1
题目2
答案A2
试卷B
题目1
答案B1
题目2
答案B2

上面类的设计如下图:

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

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

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

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
May 06 Python
Python按行读取文件的简单实现方法
Jun 22 Python
python实现redis三种cas事务操作
Dec 19 Python
使用python PIL库实现简单验证码的去噪方法步骤
May 10 Python
使用python list 查找所有匹配元素的位置实例
Jun 11 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
Jun 25 Python
PyQt5实现暗黑风格的计时器
Jul 29 Python
python文件绝对路径写法介绍(windows)
Dec 25 Python
基于TensorFlow常量、序列以及随机值生成实例
Jan 04 Python
pytorch中图像的数据格式实例
Feb 11 Python
Python print不能立即打印的解决方式
Feb 19 Python
Python字符串格式化常用手段及注意事项
Jun 17 Python
Python设计模式之外观模式实例详解
Jan 17 #Python
Python pycharm 同时加载多个项目的方法
Jan 17 #Python
Python设计模式之建造者模式实例详解
Jan 17 #Python
在Pycharm中修改文件默认打开方式的方法
Jan 17 #Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
Jan 17 #Python
Pycharm 实现下一个文件引用另外一个文件的方法
Jan 17 #Python
pycharm 实现显示project 选项卡的方法
Jan 17 #Python
You might like
一个简单的域名注册情况查询程序
2006/10/09 PHP
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
JavaScript之appendChild、insertBefore和insertAfter使用说明
2010/12/30 Javascript
js 操作select和option常用代码整理
2012/12/13 Javascript
jquery统计复选框选中示例
2013/11/05 Javascript
使用apply方法实现javascript中的对象继承
2013/12/16 Javascript
JavaScript实现控制打开文件另存为对话框的方法
2015/04/17 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
使用 JavaScript 进行函数式编程 (一) 翻译
2015/10/02 Javascript
JavaScript字符串常用的方法
2016/03/10 Javascript
Bootstrap常用组件学习(整理)
2017/03/24 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
ionic+html5+API实现双击返回键退出应用
2019/09/17 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
Python实现的检测网站挂马程序
2014/11/30 Python
python操作 hbase 数据的方法
2016/12/18 Python
python记录程序运行时间的三种方法
2017/07/14 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
python动态文本进度条的实例代码
2020/01/22 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
Python判断字符串是否为合法标示符操作
2020/09/03 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
2020/11/28 Python
《放飞蜻蜓》教学反思
2014/04/27 职场文书
三方股东合作协议书范本
2014/09/28 职场文书
2014年生产部工作总结
2014/12/17 职场文书
大学生个人简历自我评价
2015/03/11 职场文书
催款律师函范文
2015/05/27 职场文书
欠条格式范本
2015/07/03 职场文书
2016教师学习教育法心得体会
2016/01/19 职场文书
《悲惨世界》:比天空更广阔的是人的心灵
2020/01/16 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle