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中from module import * 的一个坑
Jul 20 Python
Python版微信红包分配算法
May 04 Python
python生成器表达式和列表解析
Mar 10 Python
使用python实现个性化词云的方法
Jun 16 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 Python
python读取.mat文件的数据及实例代码
Jul 12 Python
PIL图像处理模块paste方法简单使用详解
Jul 17 Python
Django 实现图片上传和显示过程详解
Jul 18 Python
Python爬虫 批量爬取下载抖音视频代码实例
Aug 16 Python
jupyter notebook 重装教程
Apr 16 Python
详解Python yaml模块
Sep 23 Python
通过代码实例了解Python3编程技巧
Oct 13 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
支持oicq头像的留言簿(一)
2006/10/09 PHP
php下将多个数组合并成一个数组的方法与实例代码
2011/02/03 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
PHP实现的大文件切割与合并功能示例
2018/04/10 PHP
PHP下用Swoole实现Actor并发模型的方法
2019/06/12 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
Vue.js 插件开发详解
2017/03/29 Javascript
给vue项目添加ESLint的详细步骤
2017/09/29 Javascript
React key值的作用和使用详解
2018/08/23 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
react脚手架如何配置less和ant按需加载的方法步骤
2018/11/28 Javascript
一个因@click.stop引发的bug的解决
2019/01/08 Javascript
vue增加强缓存和版本号的实现方法
2019/05/01 Javascript
图解javascript作用域链
2019/05/27 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
python 获取url中的参数列表实例
2018/12/18 Python
新年快乐! python实现绚烂的烟花绽放效果
2019/01/30 Python
分析经典Python开发工程师面试题
2019/04/08 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
浅谈python量化 双均线策略(金叉死叉)
2020/06/03 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
商业房地产广告语
2014/03/13 职场文书
活动总结书
2014/05/08 职场文书
摄影展策划方案
2014/06/02 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
童年读书笔记
2015/06/26 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
Python保存并浏览用户的历史记录
2022/04/29 Python