package Template_Method_Pattern;
import java.util.Scanner;
/**
* 模板方法模式的扩展
* 钩子方法(Hook Method)
* @author dd
*
*/
public class demo2 {
public static void main(String[] args) {
System.out.println("--------------宝马3系---------------");
System.out.println("宝马3系需不需要鸣笛?0:不需要; 1:需要");
Scanner s = new Scanner(System.in);
String str = s.nextLine();
BMWX3Model b3 = new BMWX3Model();
if(str.equals("0")){
b3.setAlarm(false);
}
b3.run();
System.out.println("--------------宝马5系-------------------");
BMWX5Model b5 = new BMWX5Model();
b5.run();
}
}
abstract class BMWModel{
protected abstract void start();
protected abstract void stop();
protected abstract void alarm();
protected abstract void engineBoom();
final public void run(){
this.start();
this.engineBoom();
if(this.isAlarm()){
this.alarm();
}
this.stop();
}
protected boolean isAlarm(){
return true;
}
}
class BMWX3Model extends BMWModel{
private boolean alarmFlag = true;
protected boolean isAlarm(){
return this.alarmFlag;
}
public void setAlarm(boolean isAlarm){
this.alarmFlag = isAlarm;
}
@Override
protected void start() {
// TODO Auto-generated method stub
System.out.println("宝马3系启动");
}
@Override
protected void stop() {
// TODO Auto-generated method stub
System.out.println("宝马3系停车");
}
@Override
protected void alarm() {
// TODO Auto-generated method stub
System.out.println("宝马3系鸣笛");
}
@Override
protected void engineBoom() {
// TODO Auto-generated method stub
System.out.println("宝马3系引擎响");
}
}
class BMWX5Model extends BMWModel{
@Override
protected void start() {
// TODO Auto-generated method stub
System.out.println("宝马5系启动");
}
@Override
protected void stop() {
// TODO Auto-generated method stub
System.out.println("宝马5系停下");
}
@Override
protected void alarm() {
// TODO Auto-generated method stub
System.out.println("宝马5系鸣笛");
}
@Override
protected void engineBoom() {
// TODO Auto-generated method stub
System.out.println("宝马5系引擎响");
}
protected boolean isAlarm(){
return false;
}
}
模板方法设计模式扩展(Hook Method)
最新推荐文章于 2024-07-26 18:14:32 发布