模板模式

来源:互联网 发布:新浪足球数据库 编辑:程序博客网 时间:2024/06/06 01:04

1.建立一个抽象模板类

public abstract class HummerModel {        protected abstract void start();        protected abstract void stop();        protected abstract void alarm();        protected abstract void engineBoom();        public void run(){            this.start();            this.engineBoom();            if (this.isAlarm()){                this.alarm();            }            this.stop();        }        //这是一个钩子方法        protected boolean isAlarm(){            return true;        }}

2.具体实现类

public class HummerH1Model extends HummerModel {    private boolean isAlarm = true;    @Override    protected void start() {        System.out.println("悍马1启动");    }    @Override    protected void stop() {        System.out.println("悍马1暂停");    }    @Override    protected void alarm() {        System.out.println("悍马1鸣笛");    }    @Override    protected void engineBoom() {        System.out.println("悍马1发动机声音");    }    @Override    protected boolean isAlarm() {        return this.isAlarm;    }    public void setAlarm(boolean alarm) {        this.isAlarm = alarm;    }}

3.场景类

public class Client {    public static void main(String[] args) throws IOException {        HummerH1Model hummer1Model = new HummerH1Model();        System.out.println("--------悍马1--------");        System.out.println("悍马1是否需要喇叭声响?0-不需要   1-需要");        String type = (new BufferedReader(new InputStreamReader(System.in))).readLine();        if (type.equals("0")){            hummer1Model.setAlarm(false);        }else if (type.equals("1")){            hummer1Model.setAlarm(true);        }        hummer1Model.run();        HummerH2Model hummer2Model = new HummerH2Model();        hummer2Model.run();    }}

4.模板方法的应用场景
①多个子类用共有的方法并且逻辑基本相同时
②重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类去实现
③重构时模板方法模式是一个经常使用的模式,把相同打代码抽取到父类中,然后通过钩子函数(钩子函数见1)约束其行为