模板方法模式

模板方法模式是将子类相同的业务方法抽取到父类实现;

人跑步的时候需要穿鞋子喝水:跑步是一样的,但是穿鞋子和喝水每个人都是不一样的,所以由子类实现

package com.whereta.template;

/**
 * Vincent 创建于 2016/4/28.
 */
public abstract class Person {
    /**
     * 穿鞋
     */
    protected abstract void wearShoes();

    /**
     * 是否需要喝水,钩子函数,子类重写实现业务逻辑
     * @return
     */
    protected boolean isNeedDrinkWater() {
        return true;
    }

    /**
     * 喝水
     */
    protected abstract void drinkWater();

    public final void run() {
        this.wearShoes();
        if (isNeedDrinkWater()) {
            this.drinkWater();
        }
    }

}
package com.whereta.template;

/**
 * Vincent 创建于 2016/4/28.
 */
public class XiaoMing extends Person {

    private boolean isNeedDrinkWater=false;

    protected void wearShoes() {
        System.out.println("小明穿鞋了。。。");
    }

    protected void drinkWater() {
        System.out.println("小明喝水了。。。");

    }

    public void setNeedDrinkWater(boolean needDrinkWater) {
        isNeedDrinkWater = needDrinkWater;
    }

    @Override
    protected boolean isNeedDrinkWater() {
        return isNeedDrinkWater;
    }
}
package com.whereta.template;

/**
 * Vincent 创建于 2016/4/28.
 */
public class XiaoHong extends Person {
    protected void wearShoes() {
        System.out.println("小红穿鞋了。。。");
    }

    protected void drinkWater() {
        System.out.println("小红喝水了。。。");

    }
}
package com.whereta.template;

/**
 * Vincent 创建于 2016/4/28.
 */
public class Main {
    public static void main(String[] args) {
        XiaoMing xiaoMing=new XiaoMing();
        xiaoMing.run();
    }
}


你可能感兴趣的:(模板方法模式)