Python设计模式——模版方法模式
1.模版方法模式
做题的列子:
需求:有两个学生,要回答问题,写出自己的答案
#encoding=utf-8
__author__ = 'kevinlu1010@qq.com' class StudentA():
def answer1(self):
print '题目一:XXXXXX'
print '我的答案是:B'
def answer2(self):
print '题目一:XXXXXX'
print '我的答案是:B' class StudentB():
def answer1(self):
print '题目一:XXXXXX'
print '我的答案是:C'
def answer2(self):
print '题目一:XXXXXX'
print '我的答案是:D' if __name__=='__main__':
student_a=StudentA()
student_a.answer1()
student_a.answer2()
student_b=StudentB()
student_b.answer1()
student_b.answer2()
这样写的确定是重复的东西太多了,例如写题目,例如“我的答案是”等等,如果我们需要创建很多个studentX类,万一某一天需要改题目,就要改动很多东西,
所以模版方法模式的宗旨就是,所有重复的东西,即需要写两次以上的东西都放在一个模版里面(可以是父类,也可以是一个函数)
模版方法的实现:
#encoding=utf-8
__author__ = 'kevinlu1010@qq.com' class Student():
def answer1(self):
print '题目一:XXXXXX'
print '我的答案是:%s'%self.get_answer1()
def get_answer1(self):
return 'A'
def answer2(self):
print '题目一:XXXXXX'
print '我的答案是:%s'%self.get_answer2()
def get_answer2(self):
return 'A'
class StudentA():
def get_answer1(self):
return 'B'
def get_answer2(self):
return 'B' class StudentB():
def answer1(self):
return 'C'
def answer2(self):
return 'D' if __name__=='__main__':
student_a=StudentA()
student_a.answer1()
student_a.answer2()
student_b=StudentB()
student_b.answer1()
student_b.answer2()
这里使用了的一个技巧是,可以在父类定义一个公共的方法,然后子类重写这个方法来实现子类之间的差异化。
Python设计模式——模版方法模式的更多相关文章
- [Head First设计模式]云南米线馆中的设计模式——模版方法模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- 设计模式——模版方法模式详解(论沉迷LOL对学生的危害)
. 实例介绍 在本例中,我们使用一个常见的场景,我们每个人都上了很多年学,中学大学硕士,有的人天生就是个天才,中学毕业就会微积分,因此得了诺贝尔数学奖:也有的人在大学里学了很多东西,过得很充实很满意 ...
- Java设计模式の模版方法模式
概述 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的 ...
- 24种设计模式--模版方法模式【Template Method Pattern】
周三,9:00,我刚刚坐到位置,打开电脑准备开始干活.“小三,小三,叫一下其它同事,到会议室,开会”老大跑过来吼,带着淫笑.还不等大家坐稳,老大就开讲了,“告诉大家一个好消息,昨天终于把牛叉模型公司的 ...
- Python设计模式——工厂方法模式(FactoryMethod)
需求:有一个学雷锋活动,有买米和扫地两个内容,参与的人有大学生和社区志愿者,他们各自的方法不一样. 如果用简单工厂模式实现: #encoding=utf-8 __author__ = 'kevinlu ...
- 【java设计模式】(10)---模版方法模式(案例解析)
一.概念 1.概念 模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式. 它定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的 ...
- [Python设计模式] 第10章 怎么出试卷?——模版方法模式
github地址:https://github.com/cheesezh/python_design_patterns 题目 小时候数学老师的随堂测验,都是老师在黑板上写题目,学生在下边抄,然后再做题 ...
- NET设计模式 第二部分 行为型模式(15):模版方法模式(Template Method)
摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要. 主要内容 1.概述 2.Template Method解说 3..NET中的Te ...
- Head First 设计模式笔记(模版方法模式)
1.定义: 在一个方法中定义一个算法骨架,而将一些步骤延迟到子类中.模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 2.类图: 3.说明: 模版方法可以理解为一个方法里面包 ...
随机推荐
- 【ZT】修复iCloud中查找我的iPhone、查找我的iPad无法显示地图的方法
http://blog.sina.com.cn/s/blog_4ff28d30010118cm.html 进入C:\Windows\System32\drivers\etc在hosts文件里加入如下地 ...
- ant例子
1.安装ant 下载解压→环境变量配置→cmd输入ant 出现 Buildfile: build.xml does not exist! 代表安装成功 参考文章:http://www.cnblogs. ...
- 心跳之旅—💗—iOS用手机摄像头检测心率(PPG)
[前情提要] 光阴似箭,日月如梭,最近几年,支持心率检测的设备愈发常见了,大家都在各种测空气测雪碧的,如火如荼,于是我也来凑一凑热闹.[0]这段时间,我完成了一个基于iOS的心率检测Demo,只要稳定 ...
- How to solve GM MDI cannot complete the installation
Dear Joy, I have a problem using GM MDI diagnostic tool. When I installed it on my laptop, the tool ...
- Android_listView_BaseAdapter
layout.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" x ...
- 自定义请求头信息及cookie信息
请求网页的时候有时候我们需要传递一些参数信息,这个时候我们可以将参数放到请求头中,具体使用如下: 这里有小问题就是请求参数的属性名好像不支持下划线,即 HTTP_UID不可用,但是HTTP-UID就可 ...
- Linux下编译安装redis,详细教程
话不多说,直接开工 准备工作: 本人测试环境:Win10 虚拟机:VM Linux:CentOS5.5 (已搭建好LNMP环境) 软件包:redis-2.6.14.tar.gz (Linux下redi ...
- Linux 的使用基础---Shell程序设计
Shell是Linux系统中的一个重要的层次,它是用户与系统交互作用的界面.Shell除了作为命令解释程序以外,还是一种高级程序设计语言.利用Shell程序设计语言可以编写出功能很强.但代码简单的程序 ...
- nodejs错误:ld: library not found for -lgcc_s.10.5 clang: error: linker command failed with exit code 1 (use -v to see invocation)
解决方案: $ cd /usr/local/lib $ sudo ln -s ../../lib/libSystem.B.dylib libgcc_s.10.5.dylib 参考链接
- 理解Spark的RDD
RDD是个抽象类,定义了诸如map().reduce()等方法,但实际上继承RDD的派生类一般只要实现两个方法: def getPartitions: Array[Partition] def com ...