溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++如何實(shí)現(xiàn)模板方法模式

發(fā)布時(shí)間:2020-07-15 11:32:48 來源:億速云 閱讀:191 作者:清晨 欄目:開發(fā)技術(shù)

小編給大家分享一下C++如何實(shí)現(xiàn)模板方法模式,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

外觀模式

目錄

模式定義

模板方法模式(Facade),定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。

模式動機(jī)

  • 當(dāng)我們要完成在某一細(xì)節(jié)層次一致的一個(gè)過程或一系列步驟,但其個(gè)別步驟在更詳細(xì)的層次上的實(shí)現(xiàn)可能不同時(shí),我們通常考慮用模板方法模式來處理。
  • 既然用了繼承,并且肯定這個(gè)繼承有意義,就應(yīng)該要成為子類的模板,所有重復(fù)嗲嗎都應(yīng)該要上升到父類去,而不是讓每個(gè)子類都去重復(fù)。

UML類圖

C++如何實(shí)現(xiàn)模板方法模式

源碼實(shí)現(xiàn) abstractclass.h

class AbstractClass
{
public:
 AbstractClass();
 virtual ~AbstractClass();

 void MethodA();
 virtual int MethodB(int a = 0, int b = 0);
};

abstractclass.cpp

#include "abstractclass.h"
#include <iostream>

AbstractClass::AbstractClass()
{

}

AbstractClass::~AbstractClass()
{

}

void AbstractClass::MethodA()
{
 std::cout << __FUNCTION__ << " Call method b :" << this->MethodB(5, 4) << std::endl;
}

int AbstractClass::MethodB(int a, int b)
{
 return a + b;
}

concreteclassa.h

#include "abstractclass.h"

class ConcreteClassA : public AbstractClass
{
public:
 ConcreteClassA();
 int MethodB(int a = 0, int b = 0) override;
};

concreteclassa.cpp

#include "concreteclassa.h"

ConcreteClassA::ConcreteClassA()
{

}

int ConcreteClassA::MethodB(int a, int b)
{
 return a * b;
}

concreteclassb.h

#include "concreteclassb.h"

ConcreteClassB::ConcreteClassB()
{

}

int ConcreteClassB::MethodB(int a, int b)
{
 return a - b;
}

concreteclassb.cpp

#include "concreteclassb.h"

ConcreteClassB::ConcreteClassB()
{

}

int ConcreteClassB::MethodB(int a, int b)
{
 return a - b;
}

main.cpp

#include <iostream>
#include "concreteclassa.h"
#include "concreteclassb.h"

using namespace std;

int main()
{
 ConcreteClassA* classA = new ConcreteClassA();
 classA->MethodA();

 ConcreteClassB* classB = new ConcreteClassB();
 classB->MethodA();
 return 0;
}

運(yùn)行結(jié)果

MethodA Call method b :20
MethodA Call method b :1

優(yōu)點(diǎn)

模板方法模式的優(yōu)點(diǎn)

  • 通過把不變的行為搬移到超類,去除子類中的重復(fù)代碼來體現(xiàn)它的優(yōu)勢。
  • 提供了一個(gè)很好的代碼復(fù)用的平臺。
  • 當(dāng)不變的和可變的行為在方法的子類實(shí)現(xiàn)中混合在一起的時(shí)候,不變的行為就會在子類中重復(fù)出現(xiàn)。我們通過模板方法模式把這些行為搬移到單一的地方,這樣就幫助子類拜托重復(fù)的不變行為的糾纏。

看完了這篇文章,相信你對C++如何實(shí)現(xiàn)模板方法模式有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI