模板方法模式(template method):定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。該模式使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。
使用場景:
1、一次性實現乙個演算法的不變的部分,並將可變的行為留給子類來實現。
2、各子類中公共的行為應被提取出來並集中到乙個公共父類中以避免**重複。即「
重分解以一般化
」,首先識別現有**中的不同之處,並且將不同之處分離為新的操作。最後,用乙個呼叫這些新的操作的模板方法來替換這些不同的**。
3、控制子類擴充套件。模板方法只在特定點呼叫
「hook method
(鉤子方法)」
操作,這樣就只允許在這些點進行擴充套件。
通用類圖如下:
我們這裡的類圖會詳細一點,如下:
具體**實現如下:
abstract
class abstractmethod
else
} // 鉤子方法,protected許可權可被子類覆蓋,預設為返回true
protected
boolean hookmethod()
} class concretemethoda
extends abstractmethod
protected
void method2()
} class concretemethodb
extends abstractmethod
protected
void method2()
//覆蓋鉤子方法
protected
boolean hookmethod()
} public
class client }
測試結果:
子類 a :method1() ...
子類 b :method1() ...
子類 b :method2() ...
至此,模板方法模式就簡單地實現了,我們明白到抽象類
abstactmethod
中的模板方法實際上是提供了乙個外部可訪問的介面,外部環境由該介面進入獲得服務,而
abstractmethod
類在此將子類可能提供不同服務給封裝隱藏起來,即延遲了某些具體服務的細節,由其子類來負責實現。
另外,鉤子方法的合理使用也可以使得模板方法模式更加靈活,不至於被
templatemethod()
簡單地限制著,請參看上面例子的**實現和測試結果。
python模板模式 模板設計模式
模板模式使用抽象操作在基類中定義基本演算法,其中子類覆蓋具體行為。模板模式將演算法的輪廓保留在單獨的方法中。該方法被稱為模板方法。以下是模板模式的不同功能 它定義了操作中演算法的骨架。它包括子類,它重新定義了演算法的某些步驟。有關模板設計模式的實現,請參考以下 class makemeal def ...
模板設計模式 設計模式 模板方法模式
在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...
模板設計模式 設計模式之模板模式
模板模式,通常又叫做模板方法模式,乙個抽象類公開定義了執行方法的模板,它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方法進行,這種型別的設計模式屬於行為型模式。模板模式主要解決將通用的演算法抽象起來,同樣的 邏輯出現了重複,就可以使用模板模式進行重構。關鍵 在抽象類實現,其他步驟在子類實現...