模板方法设计模式扩展(Hook Method)

来源:互联网 发布:如何备份mysql 编辑:程序博客网 时间:2024/05/29 03:42
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;    }}
0 0