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语言的12个基础知识点小结
Jul 10 Python
快速入手Python字符编码
Aug 03 Python
详解Python自建logging模块
Jan 29 Python
PyQt5每天必学之进度条效果
Apr 19 Python
PyQt5每天必学之滑块控件QSlider
Apr 20 Python
python批量修改图片后缀的方法(png到jpg)
Oct 25 Python
Python-Seaborn热图绘制的实现方法
Jul 15 Python
Python如何调用外部系统命令
Aug 07 Python
Python 利用OpenCV给照片换底色的示例代码
Aug 03 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 Python
使用scrapy实现增量式爬取方式
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
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
PHP与MySQL开发的8个技巧小结
2010/12/17 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
php将金额数字转化为中文大写
2015/07/09 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
js脚本学习 比较实用的基础
2006/09/07 Javascript
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
JavaScript(js)设置默认输入焦点(focus)
2012/12/28 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
jQuery 选择器详解
2015/01/19 Javascript
分享javascript计算时间差的示例代码
2020/03/19 Javascript
基于JQuery实现图片轮播效果(焦点图)
2016/02/02 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
2020/08/27 Javascript
详解Vue路由History mode模式中页面无法渲染的原因及解决
2017/09/28 Javascript
使用Dropzone.js上传的示例代码
2017/10/10 Javascript
JS通过位运算实现权限加解密
2018/08/14 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
layui 解决form表单点击无反应的问题
2019/10/25 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
Python正则表达式匹配HTML页面编码
2015/04/08 Python
Python面向对象编程基础解析(二)
2017/10/26 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
传统HTML页面实现模块化加载的方法
2018/10/15 HTML / CSS
让IE支持HTML5的方法
2012/12/11 HTML / CSS
台湾团购、宅配和优惠券:17Life
2017/08/14 全球购物
领导干部失职检讨书
2015/05/05 职场文书
分家协议书范本
2016/03/22 职场文书
JavaScript函数柯里化
2021/11/07 Javascript
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏