在軟體建構過程中,對于某一項任務,它常常有穩定的整體操作結構,但各個子步驟卻有很多改變的需求,或者由于固有的原因(比如架構與應用之間的關系)而無法和任務的整體結構同時實作。
如何在确定穩定操作結構的前提下,來靈活應對各個子步驟的變化或者晚期實作需求?
定義一個操作中的算法的骨架 (穩定) ,而将一些步驟延遲 (變化) 到子類中。 Template Method使得子類可以不改變(複用)一個算法的結構即可重定義(override 重寫)該算法的 某些特定步驟。 ——《 設計模式》 GoF
Template Method模式是一種非常基礎性的設計模式,在面向對象系統中有着大量的應用。它用最簡潔的機制(虛函數的多态性) 為很多應用程式架構提供了靈活的擴充點,是代碼複用方面的基本實作結構。
除了可以靈活應對子步驟的變化外, “不要調用我,讓我來調用你” 的反向控制結構是Template Method的典型應用。
在具體實作方面,被Template Method調用的虛方法可以具有實作,也可以沒有任何實作(抽象方法、純虛方法),但一般推薦将它們設定為protected方法。