上一篇文章提出的问题,run方法的实现应该在抽象类上,不应该在实现类上。好,修改后的HummerModel代码如下:
package com.example;
/**
* 定义一个悍马的模型
*/
public abstract class HummerModel {
//首先这个模型要发动
public abstract void start();
//既然能发动就要能停下来
public abstract void stop();
//要有喇叭
public abstract void alarm();
//发动机的轰隆声
public abstract void engineBoom();
//能跑动
public void run(){
this.start();
this.engineBoom();
this.alarm();
this.stop();
}
}
下面是HummerH1Model.java的程序清单:
package com.example;
/**
* H1最接近军用系列
*/
public class HummerH1Model extends HummerModel{
public void start() {
System.out.println("悍马H1发动...");
}
public void stop() {
System.out.println("悍马H1停止...");
}
public void alarm() {
System.out.println("悍马H1鸣笛...");
}
public void engineBoom() {
System.out.println("悍马H1引擎声音是这样的...");
}
}
下面是HummerH2Model.java的程序清单:
package com.example;
/**
* H2最接近民用系列
*/
public class HummerH2Model extends HummerModel{
public void start() {
System.out.println("悍马H2发动...");
}
public void stop() {
System.out.println("悍马H2停止...");
}
public void alarm() {
System.out.println("悍马H2鸣笛...");
}
public void engineBoom() {
System.out.println("悍马H2引擎声音是这样的...");
}
}
最后是客户端的程序。如下:
package com.example;
public class Client {
public static void main(String[] args){
//开着军用版的悍马遛弯
HummerH1Model h1 = new HummerH1Model();
h1.run();
//开着民用版的悍马遛弯
HummerH2Model h2 = new HummerH2Model();
h2.run();
}
}
运行的结果如下:
悍马H1发动...
悍马H1引擎声音是这样的...
悍马H1鸣笛...
悍马H1停止...
悍马H2发动...
悍马H2引擎声音是这样的...
悍马H2鸣笛...
悍马H2停止...
非常简单的改进,这就是模板方法模式。就这模式,你可能经常在使用,但是你不知道这个就是模板方法模式啊,那些所谓的高手就可以很牛X的说“用模板方法模式就可以实现...”你还要狠崇拜的看着,哇,牛人,什么是模板方法模式啊......