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 相关文章推荐
linux系统使用python监控apache服务器进程脚本分享
Jan 15 Python
在Python中操作列表之list.extend()方法的使用
May 20 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 Python
利用Python批量生成任意尺寸的图片
Aug 29 Python
python 容器总结整理
Apr 04 Python
Django中数据库的数据关系:一对一,一对多,多对多
Oct 21 Python
python DataFrame 取差集实例
Jan 30 Python
Django Haystack 全文检索与关键词高亮的实现
Feb 17 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
django queryset 去重 .distinct()说明
May 19 Python
jupyter notebook 写代码自动补全的实现
Nov 02 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
Jan 29 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正则提取或替换img标记属性
2013/06/26 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
用js怎么把&字符换成"&amp:"
2006/10/19 Javascript
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
JS多物体 任意值 链式 缓冲运动
2012/08/10 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
jquery动态更换设置背景图的方法
2014/03/25 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
微信小程序 开发之快递查询功能的实现
2017/01/09 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
vue cli升级webapck4总结
2018/04/04 Javascript
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
vue-cli3使用mock数据的方法分析
2020/03/16 Javascript
Python操作Word批量生成文章的方法
2015/07/28 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
Python实现使用卷积提取图片轮廓功能示例
2018/05/12 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
法国和欧洲海边和滑雪度假:Pierre & Vacances
2017/01/04 全球购物
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
药学专业学生的自我评价分享
2014/02/06 职场文书
秦兵马俑教学反思
2014/02/07 职场文书
vue中div禁止点击事件的实现
2022/04/02 Vue.js