设计模式(九)--模板方法模式

 模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到了子类中去,模板方法使得子类可以在不改变算法结构的基础上,重新定义算法中的某些步骤。

设计原则:好莱坞原则(别调用我们,我们会调用你)。顶层模块会主动调用底层模块,不要用底层模块去调用顶层模块。

基本结构:

public abstract class AbstractClass {

    /**
     * 模板方法: 声明为final ,不允许子类对其结构进行破坏
     */
    public final void templateMethod() {
        operate1();

        operate2();
    }

    public abstract void operate1();

    public abstract void operate2();
    
    /**
     * 该方法可以视情况添加
     * 钩子【子类可以选择重写,主要作用是可以通过此方法控制上面的操作】
     */
    public void hock() {

    }

}

具体的例子:

public abstract class CoffeineBeverageWithHook {

    /**
     * 模板方法
     * */
    public final void prepare() {
        brew();

        if (customerWantCondiments()) {
            addCondiments();
        }
    }

    public abstract void brew();

    public abstract void addCondiments();

    /**
     * 钩子方法
     */
    public boolean customerWantCondiments() {
        return true;
    }
}

  具体实现:

public class CoffeeWithHook extends CoffeineBeverageWithHook {
    @Override
    public void brew() {
        System.out.println("brew...");
    }

    @Override
    public void addCondiments() {
        System.out.println("addCondiments beverage...");
    }

    @Override
    public boolean customerWantCondiments() {
        //input condition
        String condition = "y";
        if ("y".equals(condition)) {
            return true;
        } else {
            return false;
        }
    }

    public static void main(String[] args) {
        CoffeeWithHook coffeeWithHook = new CoffeeWithHook();
        coffeeWithHook.prepare();
    }
}

猜你喜欢

转载自ihenu.iteye.com/blog/2423870