模板模式

package com.yao.test.template;

/**
 * Created by yaokj on 15-12-8.
 */
public abstract class AbstractTemplate {

    /**
     * 模板方法,定义算法骨架
     */
    public final void templateMethod(){
        this.doOperation1();
        this.doOperation2();
        this.doPrimitiveOperation1();
        this.doPrimitiveOperation2();
        this.hookOperation1();
    }

    /**
     * 固定工具逻辑类,子类不需要访问
     */
    private void doOperation1(){
        System.out.println("operation1");
    }

    /**
     * 子类会用到的
     */
    protected final void doOperation2(){
        System.out.println("2");
    }

    /**
     * 子类公共功能
     */
    protected void commonOperation(){

    }

    /**
     * 原语操作1,算法中的必要步骤,且由子类为实现
     */
    protected abstract void doPrimitiveOperation1();

    /**
     * 原语操作2,算法中的必要步骤,且由子类为实现
     */
    protected abstract void doPrimitiveOperation2();

    /**
     * 钩子操作,算法中的步骤,不一定需要,提供默认实现
     * 由子类选择并具体实现
     */
    protected void hookOperation1(){

    }

    /**
     * 工厂方法,创建某个对象,在算法中可能需要实现的
     * @return 创建的某个算法实现需要的对象
     */
    protected abstract Object createOneObject();

}


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