C++設(shè)計(jì)模式之模板方法模式(TemplateMethod)
模板方法模式使用繼承來(lái)實(shí)現(xiàn)模式的功能,在基類(lèi)使用一個(gè)方法來(lái)定義算法的各個(gè)步驟,這些步驟(方法)的具體實(shí)現(xiàn)會(huì)放到子類(lèi)中,通過(guò)這樣來(lái)實(shí)現(xiàn)不同算法對(duì)象的算法拼合,完成該對(duì)象整體算法的實(shí)現(xiàn)。
作用
模板方法中定義了具體操作中所使用算法的各個(gè)步驟,并將其實(shí)現(xiàn)交由子類(lèi)完成,從而實(shí)現(xiàn)多種不同的功能;
類(lèi)視圖

實(shí)現(xiàn)
class Lunch
{
public:
Lunch(){}
virtual ~Lunch(){}
void feed()
{
cooking();
eating();
cleaning();
}
virtual void cooking()=0;
virtual void eating()
{
cout<<"I am eating,Please don't disturb me\n";
}
virtual void cleaning();
};
class MCMeal : public Lunch
{
public:
MCMeal(){}
virtual ~MCMeal(){}
void cooking()
{
cout<< "I am cooking Mc Meal\n";
}
void cleaning()
{
cout<< "I am cleaning Mc plates";
}
};
class KFCMeal : public Lunch
{
public:
KFCMeal() {}
virtual ~KFCMeal(){}
void cooking()
{
cout<< "I am cooking KFC Meal\n";
}
void eating
{
cout<< "KFC Meal is good\n";
}
void cleaning()
{
cout<< "I am cleaning KFC plates and cups\n";
}
};
int main()
{
Lunch* meal1 = new McMeal();
meal1.feed();
Lunch* meal2 = new KFCMeal();
meal2.feed();
}
應(yīng)用場(chǎng)景
- 當(dāng)一個(gè)算法功能需要能夠改變,并通過(guò)在子類(lèi)中對(duì)功能重寫(xiě)來(lái)實(shí)現(xiàn)這種變化;
- 當(dāng)算法能夠?qū)崿F(xiàn)統(tǒng)一步驟,并且可以劃分不變部分和可變部分,將可變互粉在子類(lèi)中實(shí)現(xiàn)算法不同的變化;
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
swift Character類(lèi)型詳解及實(shí)例
這篇文章主要介紹了 swift Character類(lèi)型詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-06-06
C語(yǔ)言深入刨析數(shù)據(jù)結(jié)構(gòu)之棧與鏈棧的設(shè)計(jì)與應(yīng)用
棧是限定僅在表尾進(jìn)行插入或刪除操作的線(xiàn)性表,表尾稱(chēng)為棧頂(top),表頭稱(chēng)為棧底(bottom)。棧的最主要特點(diǎn)就是“先進(jìn)后出”(FILO),或“后進(jìn)先出”(LIFO)。用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)表示的棧稱(chēng)為“鏈?!?,鏈棧對(duì)應(yīng)于鏈表2022-05-05
C++實(shí)現(xiàn)掃雷程序開(kāi)發(fā)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)掃雷程序開(kāi)發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
Java C++題解leetcode915分割數(shù)組示例
這篇文章主要為大家介紹了Java C++題解leetcode915分割數(shù)組示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)系列篇二叉樹(shù)的遍歷
本章將會(huì)詳細(xì)講解二叉樹(shù)遍歷的四種方式,分別為前序遍歷、中序遍歷、后續(xù)遍歷和層序遍歷。在學(xué)習(xí)遍歷之前,會(huì)先帶大家回顧一下二叉樹(shù)的基本概念2022-02-02
2022最新使用VSCode編譯運(yùn)行C++的過(guò)程及會(huì)遇到的兩個(gè)問(wèn)題
這篇文章主要介紹了2022最新使用VSCode編譯運(yùn)行C++的過(guò)程及會(huì)遇到的兩個(gè)問(wèn)題,這里需要注意把剛才解壓的地址加上\bin添加進(jìn)去,比如我的:D:\aaakkk\cpp\mingw64\bin,然后點(diǎn)確定,注意一定要確保它被保存了,感興趣的朋友跟隨小編一起看看吧2022-09-09

