/************************************************************************ * 模板方法模式學習筆記[C++] * Author: 陳相禮 * Time: 2009.12.03 * Compiler: VC8 ************************************************************************/ #include "TemplateMethodPattern.h" #include "TemplateMethodPattern1.h" #include <iostream> #include <string> using namespace std; void main( void ) { //-----------------模板方法模式原理類測試------------------- CAbstractClass *c; c = new CConcreteClassA(); c->vTemplateMethoc(); delete(c); c = new CConcreteClassB(); c->vTemplateMethoc(); delete(c); //-----------------模板方法模式應用類測試------------------- cout << "學生甲抄的試卷:" << endl; // 將子類變量指針改爲父類,利用多態性,實現代碼複用 CTestPaper *studentA = new CTestPaperA(); studentA->vTestQuestion1(); studentA->vTestQuestion2(); studentA->vTestQuestion3(); delete(studentA); cout << "學生乙抄的試卷:" << endl; CTestPaper *studentB = new CTestPaperB(); studentB->vTestQuestion1(); studentB->vTestQuestion2(); studentB->vTestQuestion3(); delete(studentB); } /************************************************************************ * 小結: * 1、既然用了繼承,並且肯定這個繼承有意義,就應該要成爲子類的模板 * ,所有重複的代碼都應該要上升到父類去,而不是讓每個子類都去重 * 復。 * 2、當我們要完成在某一細節層次一致的一個過程或一系列步驟,但其個 * 別步驟在更詳細的層次上的實現可能不同時,我們通常考慮用模板方 * 法模式來處理。 * 3、模板方法模式是通過把不變行爲搬移到超類,去除子類中的重複代碼 * 來體現它的優勢。 * 4、模板方法模式提供了一個很好的代碼複用平臺。 * 5、當不變的和可變的行爲在方法的子類實現中混合在一起的時候,不變 * 的行爲就會在子類中重複出現。 * 6、通過模板方法模式把這些行爲搬移到單一的地方,這樣就幫助子類擺 * 脫重複的不變形爲的糾纏。 ************************************************************************/
#pragma once /********************************************** * 模板方法模式原理: * 定義一個操作中的算法的骨架,而將一些步 * 驟延遲到子類中。模板方法使得子類可以不改 * 變一個算法的結構即可重定義該算法的某些特 * 定步驟。 ***********************************************/ #include <iostream> #include <string> using namespace std; //--------------------------------------------- // 抽象算法類 // 實現了一個模板方法,定義了算法骨架, // 具體子類將重定義vPrimitiveOperation以實現 // 一個算法的步驟。 class CAbstractClass { public: // 一些抽象行爲,放到子類中去實現 virtual void vPrimitiveOperation1(){}; virtual void vPrimitiveOperation2(){}; // 模板方法,給出邏輯框架,而邏輯的 // 組成是一些相應的抽象操作,他們都 // 是推遲到子類實現 void vTemplateMethoc() { vPrimitiveOperation1(); vPrimitiveOperation2(); cout << "抽象類部分!" << endl; } protected: private: }; //--------------------------------------------- // 實現類A // 定義一個或者多個抽象方法,實現 // vPrimitiveOperation以完成算法中與特定子類 // 相關的步驟。 class CConcreteClassA : public CAbstractClass { public: void vPrimitiveOperation1() { cout << "具體類A方法1的實現!" << endl; } void vPrimitiveOperation2() { cout << "具體類A方法2的實現!" << endl; } protected: private: }; //--------------------------------------------- // 實現類B // 定義一個或者多個抽象方法,實現 // vPrimitiveOperation以完成算法中與特定子類 // 相關的步驟。 class CConcreteClassB: public CAbstractClass { public: void vPrimitiveOperation1() { cout << "具體類B方法1的實現!" << endl; } void vPrimitiveOperation2() { cout << "具體類B方法2的實現!" << endl; } protected: private: };
#pragma once /********************************************** * * 模板方法模式應用:金庸小說試題考試 * ***********************************************/ #include <iostream> #include <string> using namespace std; // 金庸小說考試試卷 class CTestPaper { public: void vTestQuestion1() { cout << "楊過得到,後來給了過境,煉成倚天劍、屠龍刀的玄鐵可能是[ ]:" << endl; cout << "a.球墨鑄鐵 b.馬口鐵 c.高速合金鋼 d.碳素纖維" << endl; cout << "答案是:" << strAnswer1() << endl; } void vTestQuestion2() { cout << "楊過、程英、陸無雙剷除了情花,造成[ ]" << endl; cout << "a.使這種植物不再害人 b.使一種珍稀物種滅絕 c.破壞了那個生態圈的生態平衡 d.造成該地區沙漠化" << endl; cout << "答案是:" << strAnswer2() << endl; } void vTestQuestion3() { cout << "藍鳳凰致使華山師徒、桃谷六仙嘔吐不止,如果你是大夫,會給他們開什麼藥[]" << endl; cout << "a.阿司匹林 b.牛黃解毒片 c.氟哌酸 d.讓他們喝大量的生牛奶 e.以上全不對" << endl; cout << "答案是:" << strAnswer3() << endl; } protected: virtual string strAnswer1() { return ""; }; virtual string strAnswer2() { return ""; }; virtual string strAnswer3() { return ""; }; private: }; // 學生甲抄的試卷 class CTestPaperA : public CTestPaper { public: protected: string strAnswer1(){ return "b"; }; string strAnswer2(){ return "c"; }; string strAnswer3(){ return "a"; }; private: }; // 學生乙抄的試卷 class CTestPaperB : public CTestPaper { public: protected: string strAnswer1(){ return "c"; }; string strAnswer2(){ return "a"; }; string strAnswer3(){ return "a"; }; private: };
本文分享自華爲雲社區《10分鐘搞懂各種內存溢出案例!!(含完整源碼,建議收藏)》,作者:冰 河。 作爲程序員,多多少少都會遇到一些內存溢出的場景,如果你還沒遇到,說明你工作的年限可能比較短,或者你根本就是個假程序員!哈哈,開個玩笑。今天,我
Qt 是目前最先進、最完整的跨平臺C++開發工具。它不僅完全實現了一次編寫,所有平臺無差別運行,更提供了幾乎所有開發過程中需要用到的工具。如今,Qt已被運用於超過70個行業、數千家企業,支持數百萬設備及應用。 本文將爲大家演示如何使用QRh
JetBrains IDEs日前正式發佈了v2024.1版本,此版本中最大的亮點就是帶來了AI賦能的全行代碼補全,同時在最新的IDEs中重做了終端、擁有更強大的代碼編輯和導航功能、更智能的代碼分析和提示、更優化的性能、更豐富的插件和集成等。
本文分享自華爲雲社區《一文徹底喫透MyBatis源碼!!》,作者:冰 河。 寫在前面 隨着互聯網的發展,越來越多的公司摒棄了Hibernate,而選擇擁抱了MyBatis。而且,很多大廠在面試的時候喜歡問MyBatis底層的原理和源碼實現
文|苟振東(花名:盛知) Koupleless 項目 committer 螞蟻集團技術專家 本文 5789 字 閱讀 12 分鐘 本篇文章屬於 Koupleless 進階系列文章第二篇,默認讀者對 Koupleless 的基礎概念、能力都
1. 引言 在現代軟件開發過程中,性能優化和故障排查是保證應用穩定運行的關鍵任務之一。Java作爲一種廣泛使用的編程語言,其生態中湧現出了許多優秀的監控和診斷工具,諸如:SkyWalking、Zipkin等,它們幫助開發者和運維人員
· 前言 · 在國內,公網服務器與本地服務器的通信一直是個難題,本地服務器因爲IP是動態變化的,公網服務器沒辦法將請求發送給本地服務器。爲了解決這個問題,所以採用WebSocket協議替換Http協議。爲了實現請求等待,使用Gu
在這裏分享一下通過拖取 DataCube 代碼審計後發現的一些漏洞,包括前臺的文件上傳,信息泄露出賬號密碼,後臺的文件上傳。當然還有部分 SQL 注入漏洞,因爲 DataCube 採用的是 SQLite 的數據庫,所以SQL 注入相對來說顯
轉載自劉茫茫看山 問題背景 某天我們的租戶反饋數據庫連接缺少必要的驅動,我們通過日誌查看確實是缺少部分數據庫的驅動,因爲DolphinScheduler默認只帶了Oracle和MySQL的驅動,並且需要將pom文件中的test模式去掉纔可以
鴻蒙原生應用再新丁!新華社 入局鴻蒙 來自 #HarmonyOS# 微博5月27日消息 #鴻蒙千帆起#新華社客戶端完成鴻蒙原生應用核心版本開發,將實現不同使用場景下更加智能、精準、及時的要聞推送,以及主流價值的全場景覆蓋和高效傳播!與此同
記一次攻防演練中幸運的從若依弱口令到後臺getshell的過程和分析。 0x01 漏洞發現 首先,我會先把目標的二級域名拿去使用搜索引擎來搜索收集到包含這個目標二級域名的三級域名或者四級域名的網站。 這樣子可以快速的定位到你所要測試的漏洞
通過類之間的關係圖,讀懂spring boot原理 RequestBodyAdvice接口用於對Controller方法接收的請求體進行全局處理,可以在請求體被讀取之前或之後對請求體進行修改、包裝或添加一些額外的處理邏輯。下面是Req
鴻蒙原生應用再新丁!學習強國 入局鴻蒙 來自 #HarmonyOS# 微博5月23日消息 中央宣傳部宣傳輿情研究中心宣佈,將基於HarmonyOS NEXT鴻蒙星河版啓動“學習強國”App鴻蒙原生應用開發!“學習強國”App將爲鴻蒙生態帶