一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C++實現模板方法模式的示例代碼

C++實現模板方法模式的示例代碼

2021-09-15 15:18鬼谷子com C/C++

這篇文章主要介紹了++實現模板方法模式,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

模式定義

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

模式動機

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

UML類圖

C++實現模板方法模式的示例代碼

源碼實現 abstractclass.h

?
1
2
3
4
5
6
7
8
9
class AbstractClass
{
public:
 AbstractClass();
 virtual ~AbstractClass();
 
 void MethodA();
 virtual int MethodB(int a = 0, int b = 0);
};

abstractclass.cpp

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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

?
1
2
3
4
5
6
7
8
#include "abstractclass.h"
 
class ConcreteClassA : public AbstractClass
{
public:
 ConcreteClassA();
 int MethodB(int a = 0, int b = 0) override;
};

concreteclassa.cpp

?
1
2
3
4
5
6
7
8
9
10
11
#include "concreteclassa.h"
 
ConcreteClassA::ConcreteClassA()
{
 
}
 
int ConcreteClassA::MethodB(int a, int b)
{
 return a * b;
}

concreteclassb.h

?
1
2
3
4
5
6
7
8
9
10
11
#include "concreteclassb.h"
 
ConcreteClassB::ConcreteClassB()
{
 
}
 
int ConcreteClassB::MethodB(int a, int b)
{
 return a - b;
}

concreteclassb.cpp

?
1
2
3
4
5
6
7
8
9
10
11
#include "concreteclassb.h"
 
ConcreteClassB::ConcreteClassB()
{
 
}
 
int ConcreteClassB::MethodB(int a, int b)
{
 return a - b;
}

main.cpp

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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;
}

運行結果

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

優點

模板方法模式的優點

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

 缺點

模式的缺點

到此這篇關于++實現模板方法模式的示例代碼的文章就介紹到這了,更多相關c++ 模板方法模式內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:http://www.cnblogs.com/wzxNote/p/13298419.html

延伸 · 閱讀

精彩推薦
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
主站蜘蛛池模板: 国产suv精品一区二区四区三区 | 国产精品怡红院在线观看 | 97久久天天综合色天天综合色hd | 51国产午夜精品免费视频 | 成熟女人50岁一级毛片不卡 | 91sao国产在线观看 | 网址在线观看你懂我意思吧免费的 | 免费午夜影院 | 无套大战白嫩乌克兰美女 | 四虎视屏 | 国产欧美一区二区三区免费 | 狠狠色伊人亚洲综合网站色 | 欧美日韩一二三区免费视频观看 | 国产精品 视频一区 二区三区 | 办公室恋情在线观看 | 香蕉精品 | 久久偷拍国2017的 | 国产乱子伦一区二区三区 | 九九精品免视频国产成人 | 免费国产一级 | tube8最近日本护士 | 久久视频在线视频观看精品15 | 亚洲精品中文 | 国产成人亚洲精品乱码在线观看 | h动态图男女啪啪27报 | 国产亚洲精品自在线亚洲情侣 | 日本亚洲欧洲高清有码在线播放 | ysl千人千色t9t9t9 | 国产一级毛片潘金莲的奶头 | h片免费网站 | 国产欧美一区二区三区免费看 | www.午夜剧场| 3d动漫免费 | 色小孩导航 | 男女xxoo做爰猛烈动态一 | 国产a不卡片精品免费观看 国产aaa伦理片 | 久久久久久久电影 | a色在线 | 99久在线| 欧美性xxx狂流白浆 欧美性f | 国产女同精品 |