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实现抓取百度搜索结果页的网站标题信息
Jan 22 Python
python re模块findall()函数实例解析
Jan 19 Python
彻底搞懂Python字符编码
Jan 23 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
Apr 28 Python
django允许外部访问的实例讲解
May 14 Python
python使用folium库绘制地图点击框
Sep 21 Python
python tkinter库实现气泡屏保和锁屏
Jul 29 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
Mar 30 Python
动态设置django的model field的默认值操作步骤
Mar 30 Python
Python使用itcaht库实现微信自动收发消息功能
Jul 13 Python
python调用私有属性的方法总结
Jul 24 Python
pytorch 中forward 的用法与解释说明
Feb 26 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
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
php url路由入门实例
2014/04/23 PHP
PHP实现文件上传下载实例
2016/10/18 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
Vue路由history模式解决404问题的几种方法
2018/09/29 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
JS实现“全选”和"全不选"功能代码实例
2020/02/06 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
JS实现炫酷轮播图
2020/11/15 Javascript
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
Python 元组(Tuple)操作详解
2014/03/11 Python
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
python合并同类型excel表格的方法
2018/04/01 Python
更改Python的pip install 默认安装依赖路径方法详解
2018/10/27 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
使用PIL(Python-Imaging)反转图像的颜色方法
2019/01/24 Python
python读取指定字节长度的文本方法
2019/08/27 Python
Python列表list操作相关知识小结
2020/01/29 Python
django中的数据库迁移的实现
2020/03/16 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
css3旋转木马_动力节点Java学院整理
2017/07/12 HTML / CSS
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
幼师自荐信
2013/10/26 职场文书
爱国演讲稿400字
2014/05/07 职场文书
2014年文员工作总结
2014/11/18 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
质量承诺书格式范文
2015/04/28 职场文书
未婚证明格式
2015/06/15 职场文书
小学大队长竞选稿
2015/11/20 职场文书