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修改注册表终止360进程实例
Oct 13 Python
栈和队列数据结构的基本概念及其相关的Python实现
Aug 24 Python
轻松掌握python设计模式之访问者模式
Nov 18 Python
Python简单实现自动删除目录下空文件夹的方法
Aug 29 Python
Python rstrip()方法实例详解
Nov 11 Python
python实现列表中最大最小值输出的示例
Jul 09 Python
Python3内置模块之base64编解码方法详解
Jul 13 Python
django数据模型(Model)的字段类型解析
Dec 25 Python
python实现堆排序的实例讲解
Feb 21 Python
python实现猜单词游戏
May 22 Python
python 在sql语句中使用%s,%d,%f说明
Jun 06 Python
Python如何用re模块实现简易tokenizer
May 02 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
PHP5与MySQL数据库操作常用代码 收集
2010/03/21 PHP
Session服务器配置指南与使用经验的深入解析
2013/06/17 PHP
php计算当前程序执行时间示例
2014/04/24 PHP
php实现计算百度地图坐标之间距离的方法
2016/05/05 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
php json转换相关知识(小结)
2018/12/21 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
JavaScript中的Promise使用详解
2015/06/24 Javascript
jquery实现平滑的二级下拉菜单效果
2015/08/26 Javascript
详解JavaScript的回调函数
2015/11/20 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
2017/02/20 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
AngularJs+Bootstrap实现漂亮的计算器
2017/08/10 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
Layui 数据表格批量删除和多条件搜索的实例
2019/09/04 Javascript
vue使用@scroll监听滚动事件时,@scroll无效问题的解决方法详解
2019/10/15 Javascript
node crawler如何添加promise支持
2020/02/01 Javascript
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
使用Python从有道词典网页获取单词翻译
2016/07/03 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
np.dot()函数的用法详解
2020/01/17 Python
python cookie反爬处理的实现
2020/11/01 Python
python 制作简单的音乐播放器
2020/11/25 Python
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
太阳镜仓库,售价20美元或更少:Sunglass Warehouse
2016/09/28 全球购物
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
西班牙香水和化妆品连锁店:Druni
2019/05/05 全球购物
2014年村计划生育工作总结
2014/11/14 职场文书
员工考勤管理制度
2015/08/06 职场文书
校园运动会广播稿
2015/08/19 职场文书
教师廉政准则心得体会
2016/01/20 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
Python识别花卉种类鉴定网络热门植物并自动整理分类
2022/04/08 Python