模板方法

来源:互联网 发布:企业铃声制作软件 编辑:程序博客网 时间:2024/05/17 03:02
/* * 抽象基类,为所有子类提供一个算法框架 *  * 提神饮料 */public abstract class RefreshBeverage {    /*     * 制备饮料的模板方法     * 封装了所有子类共同遵循的算法框架     */    public final void prepareBeverageTemplate(){        //步骤1 将水煮沸        boilWater();        //步骤2 泡制饮料        brew();        //步骤3 将饮料倒入杯中        pourInCup();        if(isCustomerWantsCondiments()){            //步骤4 加入调味料            addCondiments();        }    }    /*     * Hook, 钩子函数,提供一个默认或空的实现     * 具体的子类可以自行决定是否挂钩以及如何挂钩     * 询问用户是否加入调料     */     protected boolean isCustomerWantsCondiments() {        return true;    }    /*     * 基本方法,将水煮沸     */    private void boilWater() {        System.out.println("将水煮沸");    }    /*     * 基本方法,将饮料倒入杯中     */    private void pourInCup() {        System.out.println("将饮料倒入杯中");    }    /*     * 抽象的基本方法,泡制饮料     */    protected abstract void brew();    /*     * 抽象的基本方法, 加入调味料     */    protected abstract void addCondiments();}
/* * 具体子类,提供了制备茶的具体实现 */public class Tea extends RefreshBeverage {    @Override    protected void brew() {        System.out.println("用80度的热水浸泡茶叶5分钟");    }    @Override    protected void addCondiments() {        System.out.println("加入柠檬");    }    @Override    /*     * 子类通过覆盖的形式选择挂载钩子函数     * @see com.imooc.pattern.template.RefreshBeverage#isCustomerWantsCondiments()     */    protected boolean isCustomerWantsCondiments(){        return false;    }}
/* * 具体子类,提供了咖啡制备的具体实现 */public class Coffee extends RefreshBeverage {    @Override    protected void brew() {        System.out.println("用沸水冲泡咖啡");    }    @Override    protected void addCondiments() {        System.out.println("加入糖和牛奶");    }}
public class RefreshBeverageTest {    public static void main(String[] args) {        System.out.println("制备咖啡...");        RefreshBeverage b1 = new Coffee();        b1.prepareBeverageTemplate();        System.out.println("咖啡好了!");        System.out.println("\n******************************************");        System.out.println("制备茶...");        RefreshBeverage b2 = new Tea();        b2.prepareBeverageTemplate();        System.out.println("茶好了!");    }}

参考:http://www.imooc.com/

0 0
原创粉丝点击