模板方法模式

2021-06-22 21:52:32 字數 1618 閱讀 3670

1.在現實中我們經常會遇到這種情況,有些事情的實現有固定的流程步驟,但是每乙個步驟的具體實現是可變的,如我們申請護照的步驟一般是提交申請、提交相關材料、視窗辦理、銀行繳費、領證,這是乙個固定不變的流程,但是對於每乙個步驟具體怎樣實現對於每乙個辦理點來說可能不一樣,如領證這個步驟,我可以是直接去辦理點領取,也可以是選擇郵寄等;

2.以上這類問題應用到軟體領域,我們可以採用模板方法模式來進行設計;

3.模板方法模式:定義乙個操作中演算法的框架,而將一些步驟延遲到子類,他使得子類可以不改變乙個演算法的機構就可以重新定義該演算法的某些步驟;

4.在模板方法模式中我們將實現功能的每乙個步驟所對應的方法稱為基本方法,呼叫這些基本方法同時定義這些基本方法執行順序的方法稱為模板方法;

5.通過使用模板方法模式,可以將一些複雜流程的實現步驟封裝在一系列基本方法中,在抽象父類中提供乙個稱之為模板方法的方法來定義這些基本方法的執行次序,而通過其子類來覆蓋某些步驟,從而使得相同的演算法框架可以有不同的執行結果;

1.首先定義乙個抽象基類,在該類中定義了乙個模板方法,該方法決定了演算法的總體框架和各個步驟的執行順序

namespace templatemethod

/// /// 去目的地

///

public abstract void todestination();

/// /// 吃東西

///

public abstract void toeat();

/// /// 回家

///

public abstract void gohome();

/// /// 點單

///

public void singlepoint()

/// /// 買單

///

public void pay()

}}

2.定義子類繼承抽象基類,同時根據不同的需求實現基類中特定的抽象方法

namespace templatemethod

public override void toeat()

public override void gohome()

}}

namespace templatemethod

public override void toeat()

public override void gohome()

}}

3.使用者根據特定的需求進行呼叫

namespace templatemethod

}}

1.抽象共同點:對業務或演算法中相同的邏輯框架進行抽象;

2.封裝變化點:將框架中各個步驟的具體實現進行封裝;

3.主要形式:定義乙個抽象基類,在抽象基類中定義乙個模板方法,該方法決定演算法中各個步驟的執行順序;定義子類繼承與該抽象基類,並實現該抽象基類中的各個步驟,流程的控制由父類進行控制。

1.某個方法的實現需要多個步驟,其中某些步驟的實現是固定的,某些步驟的實現是變化的;

2.我們知道乙個業務或演算法所需的關鍵步驟,並確定了這些步驟的執行順序,但某些步驟的具體實現是未知的,或者說某些步驟的實現與具體的環境有關;

模板方法模式

有這樣乙個場景 乙個演算法或流程,它的步驟以及步驟之間的順序是固定的,但具體的某一步可能有不同的實現。對於這麼乙個場景,可以建立多個類,各個類實現不同的實現,但是這樣的缺點是 易錯 難改,易錯 應為步驟和順序是固定的,而且在每個類中都要寫一遍,程式設計師怎有心情不好的時候,就有可能把其中某一步給寫錯...

模板方法模式

模板方法模式 定義乙個演算法框架,將裡面的操作步驟推遲到子類中去執行,這樣使得子類不用改變框架,只需改變某些操作步驟方法 ifndef test h define test h include include using namespace std class test virtual test v...

模板方法模式

模板方法模式 在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法的某些步驟。還可以使用鉤子對可選部分進行判斷。include include using namespace std class caffeinebeverage ...