话说新浪同学和腾讯同学是同桌。
有一天老师要给大家来个临时测验,由于没有事先准备,老师只好把试题抄写在黑板上,再由同学们自己抄写到练习本上,然后作答。
下面是新浪同学抄写并作答的试题:
public class SinaTest { public void test() { System.out.print("国内最牛的微博之一是?"); System.out.println("新浪微博"); } }然后腾讯同学有点近视,看不清黑板,只好抄写新浪同学的试题:
public class TencentTest { public void test() { System.out.print("国内最牛的微博是?"); System.out.println("腾讯微博"); } }由于腾讯同学比较慌忙,竟然将这一句中最为精妙的两个字漏掉了。
新浪同学和腾讯同学平时都不怎么爱学习,抄写感觉好累,新浪同学有点困了,眼睛都睁不开了,腾讯同学呢,也好不到哪里去,找了本书盖在头上,爬在桌上睡着了,书本上写了两个大字:隐身。
老师检查测验结果,于是有了以下代码:
public class Client { public static void main(String[] args) { SinaTest sina = new SinaTest(); sina.test(); TencentTest tencent = new TencentTest(); tencent.test(); } }结果如下:
国内最牛的微博之一是?新浪微博 国内最牛的微博是?腾讯微博新浪同学比较生气:“腾讯,你小子好不谦虚啊!”,腾讯同学反驳道:“事实就是这样!”。两人为此要闹翻脸了。
老师觉得这样不太好,如果自己在黑板上抄错了,同学们岂不是都要重抄?老师为了解决这个问题,立刻去将试题印成了试卷,发给了新浪同学和腾讯同学:
public abstract class BaseTest { public void ask() { System.out.println("国内最牛的微博之一是?" + answer()); } public abstract String answer(); }可以看到,老师已经将答案印好了,谁都不能改动了,新浪同学和腾讯同学只要老老实实的回答问题就行了:
public class SinaTest extends BaseTest { @Override public String answer() { return "新浪微博"; } }public class TencentTest extends BaseTest { @Override public String answer() { return "腾讯微博"; } }再来看看老师是怎么审核测试试卷的:
public class Client { public static void main(String[] args) { BaseTest sina = new SinaTest(); BaseTest tencent = new TencentTest(); sina.ask(); tencent.ask(); } }看以看到,新浪同学和腾讯同学只要把试卷拿到手即可,然后开始回答问题,对于每个答案都有自己的回答的实现方式,这就好办多了。
我们来看看答题结果:
国内最牛的微博之一是?新浪微博 国内最牛的微博之一是?腾讯微博不知不觉中,新浪同学自己体验了一把一种设计模式:模板方法模式。
模板方法模式是通过把不变的的行为搬移到超类,去除子类中重复的代码来体现它的优势;当不变的和可变的行为在子类实现中混合在一起的时候,不变的行为就会在子类中重复实现,我们通过模板方法模式把这些行为搬移到单一的地方,这样就可以帮助子类摆脱重复不变行为的纠缠。
最后,顺便说一下,新浪同学和腾讯同学都是我的好朋友,所以我的学习成绩也不好,哈哈。