1. 程式人生 > >模板方法模式-Template Method Pattern

模板方法模式-Template Method Pattern

 

       5.1 模式優點
       模板方法模式的主要優點如下:

       (1) 在父類中形式化地定義一個演算法,而由它的子類來實現細節的處理,在子類實現詳細的處理演算法時並不會改變演算法中步驟的執行次序。

       (2) 模板方法模式是一種程式碼複用技術,它在類庫設計中尤為重要,它提取了類庫中的公共行為,將公共行為放在父類中,而通過其子類來實現不同的行為,它鼓勵我們恰當使用繼承來實現程式碼複用。

       (3) 可實現一種反向控制結構,通過子類覆蓋父類的鉤子方法來決定某一特定步驟是否需要執行。

       (4) 在模板方法模式中可以通過子類來覆蓋父類的基本方法,不同的子類可以提供基本方法的不同實現,更換和增加新的子類很方便,符合單一職責原則和開閉原則。

 

       5.2 模式缺點
       模板方法模式的主要缺點如下:

       需要為每一個基本方法的不同實現提供一個子類,如果父類中可變的基本方法太多,將會導致類的個數增加,系統更加龐大,設計也更加抽象,此時,可結合橋接模式來進行設計。

 

       5.3 模式適用場景
       在以下情況下可以考慮使用模板方法模式:

       (1) 對一些複雜的演算法進行分割,將其演算法中固定不變的部分設計為模板方法和父類具體方法,而一些可以改變的細節由其子類來實現。即:一次性實現一個演算法的不變部分,並將可變的行為留給子類來實現。

       (2) 各子類中公共的行為應被提取出來並集中到一個公共父類中以避免程式碼重複。

       (3) 需要通過子類來決定父類演算法中某個步驟是否執行,實現子類對父類的反向控制。

2個物件

    (1) AbstractClass(抽象類):在抽象類中定義了一系列基本操作(PrimitiveOperations),這些基本操作可以是具體的,也可以是抽象的,每一個基本操作對應演算法的一個步驟,在其子類中可以重定義或實現這些步驟。同時,在抽象類中實現了一個模板方法(Template Method),用於定義一個演算法的框架,模板方法不僅可以呼叫在抽象類中實現的基本方法,也可以呼叫在抽象類的子類中實現的基本方法,還可以呼叫其他物件中的方法。

       (2) ConcreteClass(具體子類):它是抽象類的子類,用於實現在父類中宣告的抽象基本操作以完成子類特定演算法的步驟,也可以覆蓋在父類中已經實現的具體基本操作。

注意:

通常是個模板流程,能替換流程的一個部分

鉤子函式,反向控制模板的一些流程,通常是一些isBoolean方法

---------------------
作者:Liuwei-Sunny
來源:CSDN
原文:https://blog.csdn.net/lovelion/article/details/8299927
版權宣告:本文為博主原創文章,轉載請附上博文連結!