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设计模式——模版方法模式的更多相关文章

  1. [Head First设计模式]云南米线馆中的设计模式——模版方法模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

  2. 设计模式——模版方法模式详解(论沉迷LOL对学生的危害)

    .  实例介绍 在本例中,我们使用一个常见的场景,我们每个人都上了很多年学,中学大学硕士,有的人天生就是个天才,中学毕业就会微积分,因此得了诺贝尔数学奖:也有的人在大学里学了很多东西,过得很充实很满意 ...

  3. Java设计模式の模版方法模式

    概述 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的 ...

  4. 24种设计模式--模版方法模式【Template Method Pattern】

    周三,9:00,我刚刚坐到位置,打开电脑准备开始干活.“小三,小三,叫一下其它同事,到会议室,开会”老大跑过来吼,带着淫笑.还不等大家坐稳,老大就开讲了,“告诉大家一个好消息,昨天终于把牛叉模型公司的 ...

  5. Python设计模式——工厂方法模式(FactoryMethod)

    需求:有一个学雷锋活动,有买米和扫地两个内容,参与的人有大学生和社区志愿者,他们各自的方法不一样. 如果用简单工厂模式实现: #encoding=utf-8 __author__ = 'kevinlu ...

  6. 【java设计模式】(10)---模版方法模式(案例解析)

    一.概念 1.概念 模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式. 它定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的 ...

  7. [Python设计模式] 第10章 怎么出试卷?——模版方法模式

    github地址:https://github.com/cheesezh/python_design_patterns 题目 小时候数学老师的随堂测验,都是老师在黑板上写题目,学生在下边抄,然后再做题 ...

  8. NET设计模式 第二部分 行为型模式(15):模版方法模式(Template Method)

    摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要. 主要内容 1.概述 2.Template Method解说 3..NET中的Te ...

  9. Head First 设计模式笔记(模版方法模式)

    1.定义: 在一个方法中定义一个算法骨架,而将一些步骤延迟到子类中.模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 2.类图:  3.说明: 模版方法可以理解为一个方法里面包 ...

随机推荐

  1. android平台获取手机IMSI,IMEI ,序列号,和 手机号的方法

    1)获取运营商sim卡imsi号, String IMSI =android.os.SystemProperties.get( android.telephony.TelephonyPropertie ...

  2. PHP加速器

    转http://www.vpser.net/opt/apc-eaccelerator-xcache.html 一.PHP加速器介绍         PHP加速器是一个为了提高PHP执行效率,从而缓存起 ...

  3. php笔记01:php基本语法格式

    1. <?php ....... ?> 2. <script laugnage="php"> ....... </script> 3. < ...

  4. Android开发的初学者快速创建一个项目

    因为gwf的原因,大陆连不上google所以AndroidSDK是无法更新的 而且设置代理也不一定能解决问题 如果是初学者想快速的了解安卓开发,可以在国内的内网下载整合包 下载地址:http://rj ...

  5. 设置N秒后执行某个方法或函数

    设置N秒后执行一个函数,最常用的是设置一个定时器,今天刚看到有这样一个函数,感觉还是比较简单实用的,就先记下来,免得忘记了. 5秒后执行pushSecondController这个函数 [self p ...

  6. 带有可点击区域的图像映射:HTML <map> 标签

    实例 带有可点击区域的图像映射: <img src="planets.jpg" border="0" usemap="#planetmap&qu ...

  7. FastDFS配置过程

    在我的生产环境中利用FastDFS实现动静分离的方案

  8. hihocoder 1186

    1186 : Coordinates 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Give you two integers P and Q. Let all div ...

  9. li 水平排列并自动填满 ul

    找了li 如何水平排列并自动填满 ul,同时 li 宽度平均?资料,里面有提到"请用js动态计算保证兼容性", 因为我想实现的是,水平滚动条,ul的上级div是固定的宽度1000p ...

  10. ###Markdown初步学习

    Markdown学习/* GitHub stylesheet for MarkdownPad (http://markdownpad.com) *//* Author: Nicolas Hery - ...