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 用户登录验证的小例子
Mar 06 Python
python的re模块应用实例
Sep 26 Python
利用Python进行异常值分析实例代码
Dec 07 Python
TensorFlow实现iris数据集线性回归
Sep 07 Python
Python使用requests提交HTTP表单的方法
Dec 26 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
Jun 05 Python
Python3实现zip分卷压缩过程解析
Oct 09 Python
python基于event实现线程间通信控制
Jan 13 Python
python3操作注册表的方法(Url protocol)
Feb 05 Python
python 使用cx-freeze打包程序的实现
Mar 14 Python
Python之字典添加元素的几种方法
Sep 30 Python
Python+DeOldify实现老照片上色功能
Jun 21 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
php安全配置 如何配置使其更安全
2011/12/16 PHP
Yii2.0预定义的别名功能小结
2016/07/04 PHP
PHP中类的自动加载的方法
2017/03/17 PHP
Laravel框架Auth用户认证操作实例分析
2019/09/29 PHP
精通Javascript系列之Javascript基础篇
2011/06/07 Javascript
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
AngularJS 视图详解及示例代码
2016/08/17 Javascript
AngularJS入门教程之数据绑定原理详解
2016/11/02 Javascript
JavaScript常见的五种数组去重的方式
2016/12/15 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
利用Node.js了解与测量HTTP所花费的时间详解
2017/09/22 Javascript
纯js实现隔行变色效果
2017/11/29 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
npm scripts 使用指南详解
2018/10/08 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
python使用cookie库操保存cookie详解
2014/03/03 Python
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
windows系统下Python环境搭建教程
2017/03/28 Python
Python如何读取文件中图片格式
2020/01/13 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
解决Python 写文件报错TypeError的问题
2020/10/23 Python
Linux文件操作命令都有哪些
2015/02/27 面试题
日语专业个人的求职信
2013/12/03 职场文书
库房主管岗位职责
2013/12/31 职场文书
企业安全生产承诺书
2014/05/22 职场文书
图书馆标语
2014/06/19 职场文书
2016大一新生军训心得体会
2016/01/11 职场文书
JavaScript使用canvas绘制坐标和线
2021/04/28 Javascript
小程序与后端Java接口交互实现HelloWorld入门
2021/07/09 Java/Android