学习自《设计模式之禅》
要实现两种类型的悍马车,一种是军用型的,另一种是民用型的。先写个抽象类,然后两个不同型号的模型实现类。在不假思索的情况下,写了如下的代码:
1、要悍马模型,先写个抽象类,HummerModel抽象类的程序清单如下:
package com.example;
public class Client {
public static void main(String[] args){
//开着军用版的悍马遛弯
HummerH1Model h1 = new HummerH1Model();
h1.run();
//开着民用版的悍马遛弯
HummerH2Model h2 = new HummerH2Model();
h2.run();
}
}
2、H1军用车型定义如下:
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引擎声音是这样的...");
}
public void run() {
this.start();
this.engineBoom();
this.alarm();
this.stop();
}
}
2、悍马H2民用型的实现如下:
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引擎声音是这样的...");
}
public void run() {
this.start();
this.engineBoom();
this.alarm();
this.stop();
}
}
程序写到这里,我们会发现问题,HummerH1Model的run()方法的实现与HummerH2Model的run()方法的实现没什么区别。好的,这就是问题的提出。