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文件处理
Feb 29 Python
wxPython的安装图文教程(Windows)
Dec 28 Python
解决seaborn在pycharm中绘图不出图的问题
May 24 Python
python自动发邮件总结及实例说明【推荐】
May 31 Python
Django CBV类的用法详解
Jul 26 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
Aug 27 Python
flask框架渲染Jinja模板与传入模板变量操作详解
Jan 25 Python
pandas中的ExcelWriter和ExcelFile的实现方法
Apr 24 Python
python使用自定义钉钉机器人的示例代码
Jun 24 Python
python 开心网和豆瓣日记爬取的小爬虫
May 29 Python
Python Django模型详解
Oct 05 Python
python脚本框架webpy模板赋值实现
Nov 20 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
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
2014/11/29 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
php获取数据库结果集方法(推荐)
2017/06/01 PHP
php表单习惯用的正则表达式
2017/10/11 PHP
匹配任意字符的正则表达式写法
2010/04/29 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
JavaScript把数组作为堆栈使用的方法
2015/03/20 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
2015/11/23 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
jQuery双向列表选择器DIV模拟版
2016/11/01 Javascript
Angularjs 事件指令详细整理
2017/07/27 Javascript
jQuery EasyUI开发技巧总结
2017/09/26 jQuery
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
详解Vue demo实现商品列表的展示
2019/05/07 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
2019/08/05 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
Pytorch根据layers的name冻结训练方式
2020/01/06 Python
解决python运行效率不高的问题
2020/07/20 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
HTML5样式控制示例代码
2013/11/27 HTML / CSS
Hawes & Curtis澳大利亚官网:英国经典服饰品牌
2018/10/29 全球购物
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
金融行业务员的自我评价
2013/12/13 职场文书
应届优秀本科大学毕业生自我鉴定
2014/01/21 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
群众路线教育实践活动实施方案
2014/10/31 职场文书
深入解析MySQL索引数据结构
2021/10/16 MySQL
vue使用element-ui按需引入
2022/05/20 Vue.js