天天看點

模闆方法模式

一、簡介

  模闆方法模式就是定義一個算法骨架,而将算法骨架中的一些步驟延伸到子類中去,使得子類可以不改變一個算法的結構,即可重新定義該算法的某些特定步驟。這裡需要複用的是算法的結構,也就是步驟,而步驟的實作可以在子類中完成。

  模闆方法特點如下:

一次性實作一個算法的不變部分,并且将可變的行為留給子類來完成。

各子類公共的行為應該被提取出來并集中到一個公共父類中以避免代碼的重複。首先識别現有代碼的不同之處,并且把不同部分分離為新的操作,最後,用一個調用這些新的操作的模闆方法來替換這些不同的代碼。

控制子類的擴充

  模闆方法模式的組成

父類角色:提供模闆。

子類角色:為模闆提供實作。

  模闆方法模式的類圖如下:

模闆方法模式

二、示例

  父類角色:

  子類角色:

  調用類:

  調用template 從父類繼承的ConcreteTemplate()方法,ConcreteTemplate()方法就會調用子類實作的step1()和step2()方法。這樣step1()與step2()方法的執行順序已經在父類中定義好了,子類執行實作這兩個方法。當調用父類的模闆方法的時候,這兩個方法就會按照父類模闆方法定義的流程依次執行。

  模闆方法模式在許多開源架構中得到應用。如spring framework中對事務的相關處理就使用到了模闆方法模式。spring對jpa,hibernate,jdbc都提供了支援。       AbstractPlatformTransactionManager 用到了模闆方法設計模式,許多具體的資料庫層繼承了該類(如DatasourceTransactionManager、HibernateTransactionManager等)。該類将各個具體的相關的代碼抽象出來。進行資料庫操作的時候,首先會擷取事務,然後進行資料庫操作,最後按照資料操作的結果,選擇進行事務送出或是復原。這些事務的擷取,事務的送出,與復原都是在子類(如果DatasourceTransactionManager、HibernateTransactionManager這些類)中去實作的。

上一篇: 6.4. branch