码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式2-模板模式

时间:2015-08-02 21:43:48      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:设计模式

这个可以类比填表单,事务的流程是清晰的,部分过程是抽象的,需要具体实现类自己实现。
技术分享
方法:
用抽象基类定义框架
1.创建抽象类
—public abstract class RefreshBeverage
2.创建模版方法 一定要用final因为要禁止子类对方法框架的覆写
—public final void prepareBeverageTemplate()
—boilWater();
—brew();
—pourInCup();
—addCondiments();
3.实现并私有化基本方法
—private
4.添加抽象的基本方法
—protected abstract


  1. 定义一个公共的抽象父类
  2. 定义一个公共 final 的方法(封装所有子类都要遵循的算法框架)
  3. 算法框架中定义的方法子类实现相同的使用 private 修饰该方法并且实现,子类实现方法不一样的使用 protected abstact 修饰该方法并且不实现
  4. 让子类重写父类未实现的方法,实现各自的方法
  5. 在调用的实例对象采用 父类 实例名 = new 子类,在直接调用遵循的框架方法。
    实现钩子函数,以达到控制实现分支的作用.
    用钩子函数实现子类对算法框架个性化的扩展

钩子

1、框架通过提供一个个的钩子,使框架具备了更大的灵活性。不想执行算法框架中的某些个步骤,我们可以脱钩,如果想执行的话,我们可以挂钩。
实现
2、在抽象类中,提供protected钩子方法。这是个实现的或空的方法。这样子类就可以选择覆写-持钩,也可以选择不覆写-脱勾。
使用
3、提供一个isXXX类型的钩子方法。用该方法控制算法框架中
某个步骤是否执行
4、子类不覆写这个方法,就是脱钩,仍按框架逻辑执行,一旦覆写,就是挂钩,将改变框架算法方向,按子类逻辑执行。

/*
 * 抽象基类,为所有子类提供一个算法框架
 * 
 * 提神饮料
 */
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();
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

设计模式2-模板模式

标签:设计模式

原文地址:http://blog.csdn.net/gg_gogoing/article/details/47210369

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!