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进阶教程之异常处理
Aug 30 Python
推荐11个实用Python库
Jan 23 Python
python中sys.argv参数用法实例分析
May 20 Python
简单的Apache+FastCGI+Django配置指南
Jul 22 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 Python
python学习入门细节知识点
Mar 29 Python
Python3实现的旋转矩阵图像算法示例
Apr 03 Python
关于python多重赋值的小问题
Apr 17 Python
Python操作远程服务器 paramiko模块详细介绍
Aug 07 Python
python使用itchat模块给心爱的人每天发天气预报
Nov 25 Python
如何利用python生成MD5并去重
Dec 07 Python
pytorch finetuning 自己的图片进行训练操作
Jun 05 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
BBS(php & mysql)完整版(三)
2006/10/09 PHP
PHP脚本数据库功能详解(下)
2006/10/09 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
php获取服务器信息的实现代码
2013/02/04 PHP
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
jquery带下拉菜单和焦点图代码分享
2015/08/24 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
第一次接触神奇的Bootstrap网格系统
2016/07/27 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
python映射列表实例分析
2015/01/26 Python
Django自定义分页与bootstrap分页结合
2021/02/22 Python
python生成excel的实例代码
2017/11/08 Python
浅谈Django自定义模板标签template_tags的用处
2017/12/20 Python
python集合比较(交集,并集,差集)方法详解
2018/09/13 Python
Python中面向对象你应该知道的一下知识
2019/07/10 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
2020/01/03 Python
基于python3生成标签云代码解析
2020/02/18 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
用OpenCV进行年龄和性别检测的实现示例
2021/01/29 Python
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
《我要的是葫芦》教学反思
2014/02/23 职场文书
《日月潭》教学反思
2014/02/28 职场文书
入职担保书怎么写
2014/05/12 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书