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编写的com组件发生R6034错误的原因与解决办法
Apr 01 Python
如何使用VSCode愉快的写Python于调试配置步骤
Apr 06 Python
Anaconda 离线安装 python 包的操作方法
Jun 11 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
Python3 SSH远程连接服务器的方法示例
Dec 29 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
Jun 04 Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
Apr 08 Python
Django ORM 查询表中某列字段值的方法
Apr 30 Python
如何写python的配置文件
Jun 07 Python
Python调用百度OCR实现图片文字识别的示例代码
Jul 17 Python
python使用scapy模块实现ARP扫描的过程
Jan 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
动画 《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
php使用cookie实现记住登录状态
2015/04/27 PHP
PHP清除缓存的几种方法总结
2017/09/12 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
2018/05/12 PHP
php判断电子邮件是否正确方法
2018/12/04 PHP
(仅IE下有效)关于checkbox 三态
2007/05/12 Javascript
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
JS异步文件上传(兼容IE8+)
2017/04/02 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
Webpack如何引入bootstrap的方法
2017/06/17 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
详解js获取video任意时间的画面截图
2019/04/17 Javascript
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
vue实现在进行增删改操作后刷新页面
2020/08/05 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
[01:54]TI珍贵瞬间系列(三):翻盘
2020/08/28 DOTA
python实现石头剪刀布程序
2021/01/20 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
python 利用百度API识别图片文字(多线程版)
2020/12/14 Python
大学生自荐信
2013/12/11 职场文书
党支部书记先进事迹
2014/01/17 职场文书
上课迟到检讨书
2014/01/19 职场文书
销售经理岗位职责
2014/03/16 职场文书
材料物理专业求职信
2014/09/01 职场文书
个人收入证明范本
2014/09/18 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
员工工作能力评语
2014/12/31 职场文书
销售业务员岗位职责
2015/02/13 职场文书
2015个人简历自我评价语
2015/03/11 职场文书
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python