模板方法模式

簡介

模板方法模式(Template Method Pattern)
定義一個操作中算法的框架,而將一些步驟延遲到子類中。模板方法模式使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
採用工廠方法的模式,將這個節點的代碼實現轉給子類完成。
處理步驟在父類中定義好了,具體的實現延遲到子類中給出定義。


代碼實現

假設有這樣一種情況
我們去醫院看病分爲以下三個步驟,前一個步驟,和後一個步驟固定

  • 掛號
  • 門診(不固定看哪個病)
  • 買藥

代碼如下:


首先定義父類方法

/**
 * 模板方法中的父類 tabeNumber buyMedicine 的步驟固定  diagnosis的步驟不固定
 * @author guxiang
 * @date 2017-2-25 下午2:16:38
 */
public abstract class SeeDoctor {
    public void takeNumber() {
        System.out.println("掛號");
    }

    /**
     * 交給子類去實現
     */
    public abstract void diagnosis();

    public void buyMedicine() {
        System.out.println("買藥");
    }

    public final void process() {
        this.takeNumber();

        this.diagnosis();

        this.buyMedicine();
    }
}

用一個客戶類測試

/**
 * 客戶類測試
 * @author guxiang
 * @date 2017-2-25 下午2:20:35
 */
public class Client {
    public static void main(String[] args) {
        SeeDoctor sd1 = new SeeDoctor() {

            @Override
            public void diagnosis() {
                System.out.println("診斷頸椎病");
            }
        };
        sd1.process();

        SeeDoctor sd2 = new SeeDoctor() {

            @Override
            public void diagnosis() {
                System.out.println("診斷腰椎病");
            }
        };
        sd2.process();

    }
}

方法回調(鉤子方法)


模板方法模式充分的體現了“好萊塢”原則,
“不要給我們打電話,我們會給你打電話(don‘t call us, we‘ll call you)”。 IOC是Inversion of Control的簡稱,IOC的原理就是基於好萊塢原則,所有的組件都是被動的(Passive),所有的組件初始化和調用都由容器負責。(spring中有很好的體現

子類不能調用父類,而是通過父類調用子類


常見的開發場景

  • 數據庫訪問的封裝
  • Junit 的單元測試
  • Spring中的 JDBCTemplate,HibernateTemplate
  • hibernate中的模板程序
發佈了43 篇原創文章 · 獲贊 91 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章