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实现列表转换成字典数据结构的方法
Mar 11 Python
请不要重复犯我在学习Python和Linux系统上的错误
Dec 12 Python
python OpenCV学习笔记之绘制直方图的方法
Feb 08 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
May 18 Python
python for和else语句趣谈
Jul 02 Python
python实现键盘输入的实操方法
Jul 16 Python
python使用 cx_Oracle 模块进行查询操作示例
Nov 28 Python
Python使用正则实现计算字符串算式
Dec 29 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
Feb 28 Python
Python调用shell命令常用方法(4种)
May 11 Python
Python实现手势识别
Oct 21 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 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
我的php学习笔记(毕业设计)
2012/02/21 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
JS实现一个按钮的方法
2015/02/05 Javascript
jquery使用animate方法实现控制元素移动
2015/03/27 Javascript
javascript实现继承的简单实例
2015/07/26 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
JavaScript编写一个简易购物车功能
2016/09/17 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
简单实现JavaScript弹幕效果
2020/08/27 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
简单了解TypeScript中如何继承 Error 类
2019/06/21 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
零基础写python爬虫之HTTP异常处理
2014/11/05 Python
python通过floor函数舍弃小数位的方法
2015/03/17 Python
在Django的模型中添加自定义方法的示例
2015/07/21 Python
python 2.7 检测一个网页是否能正常访问的方法
2018/12/26 Python
Python实现简单查找最长子串功能示例
2019/02/26 Python
python实现中文文本分句的例子
2019/07/15 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
python 一维二维插值实例
2020/04/22 Python
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
领导调研接待方案
2014/02/27 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android