Python设计模式之模板方法模式实例详解
作者:Andy冉明 发布时间:2023-07-21 01:29:19
标签:Python,设计模式,模板方法模式
本文实例讲述了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
上面类的设计如下图:
NewPaper是抽象类,定义抽象模板并实现了抽象模板方法,TestPaper实现父类的一个或多个抽象方法
当不变和可变的行为在子类的方法中混合在一起时,不变的行为就会在子类中重复出现,通过模板方法模式把这些行为搬到单一的地方,帮助子类摆脱重复的不变行为的纠缠
希望本文所述对大家Python程序设计有所帮助。
来源:https://www.cnblogs.com/onepiece-andy/p/python-template-method-pattern.html


猜你喜欢
- 对于windows平台来说安装完MySQL后,系统就已经默认生成了许可表和账户,你不需要像在Unix平台上那样执行 mysql_instal
- 进行编程时,一般我们会给一个函数或者变量起一个名字,该名称是用于引用或寻址函数变量。但是有一个低调的函数,你不需要赋予它名字,因此该函数也叫
- 本文整理了Pytorch框架下模型的保存、复用、推理、再训练和迁移等实现。模型的保存与复用模型定义和参数打印# 定义模型结构class Le
- 生生把写过的java版改成javascript版,第一次写,很不专业,见谅。唉,我是有多闲。var Sudoku = { &nbs
- python中for循环用于针对集合中的每个元素的一个代码块,而while循环能实现满足条件下的不断运行。使用while循环时,由于whil
- 前沿小补充例3.48 查询平均成绩大于等于80分的学生学号和平均成绩SELECT Sno,AVG(Grade)FROM SCWHERE AV
- 本文实例讲述了php基于协程实现异步的方法。分享给大家供大家参考,具体如下:github上php的协程大部分是根据这篇文章实现的:http:
- 环境Laravel 5.4原理在Laravel中,门面为应用服务容器中绑定的类提供了一个“静态”接口
- 开发环境集成开发工具:jupyter notebook 6.5.2集成开发环境:Python 3.10.6第三方库:to
- python爬虫写起来非常快,虽然也可以用java,但是没有python来的简
- 【错误原因】:mysql_query执行超时.【解决办法】:修改php.ini中的 max_execution_time的值,默认为300,
- 本文实例讲述了python计算方程式根的方法。分享给大家供大家参考。具体实现方法如下:''' roots = pol
- 本文研究的主要是Python程序运行原理,具体介绍如下。编译型语言(C语言为例)动态型语言一个程序是如何运行起来的?比如下面的代码#othe
- Ranorex测试报告如何发送到邮箱在网上看了下,其实可以通过在Ranorex上或者VS调用编写发送邮箱代码就可以执行发送了,RX主要涉及到
- 更新:2017.07.17补充滚动条、win批处理拉起py2017.08.13新增自定义图标一、背景:1.工作中自己及同事在查数据库、测试接
- calccalc 是一个我们想要做剖析(性能分析)的异步函数。按照惯例,它的最后一个参数是一个callback。我们像这样使用 calc:c
- 1、fopen的使用 <?php $handle = fopen ("http://s.jb51.net/", &
- 问题背景:有一批需要处理的文件,对于每一个文件,都需要调用同一个函数进行处理,相当耗时。有没有加速的办法呢?当然有啦,比如说你将这些文件分成
- 迭代器(Iterable):能直接作用于for循环的对象,统称可迭代对象。例如:list、tuple、set、str、generator都是
- 思路:在腾讯疫情数据网站F12解析网站结构,使用Python爬取当日疫情数据和历史疫情数据,分别存储到details和history两个my