C++設(shè)計(jì)模式迪米特法則實(shí)例
迪米特法則(Law of Demeter)又叫作最少知識(shí)原則(Least Knowledge Principle 簡(jiǎn)寫LKP),就是說一個(gè)對(duì)象應(yīng)當(dāng)對(duì)其他對(duì)象有盡可能少的了解,不和陌生人說話。英文簡(jiǎn)寫為: LoD.
類的設(shè)計(jì)接口盡量封裝完善,讓外部直接調(diào)用
#include<iostream> #include<string> #include<vector> using namespace std; class AbstractBuilding { public: virtual void sale() = 0; virtual string getQuality() = 0; }; class BuildingA :public AbstractBuilding { public: BuildingA() { mQulity = "高品質(zhì)"; } virtual void sale() { cout << "樓盤A" << mQulity << "被售賣!" << endl; } virtual string getQuality() { return mQulity; } public: string mQulity; }; class BuildingB :public AbstractBuilding { public: BuildingB() { mQulity = "低品質(zhì)"; } virtual void sale() { cout << "樓盤B" << mQulity << "被售賣!" << endl; } virtual string getQuality() { return mQulity; } public: string mQulity; }; // 中介類 class Mediator { public: Mediator() { AbstractBuilding* building = new BuildingA; vBuilding.push_back(building); building = new BuildingB; vBuilding.push_back(building); } // 對(duì)外提供接口 AbstractBuilding* findMyBuilding(string quality) { for (vector<AbstractBuilding*>::iterator it = vBuilding.begin(); it != vBuilding.end(); it++) { if ((*it)->getQuality() == quality) { return *it; } } return NULL; } ~Mediator() { for (vector<AbstractBuilding*>::iterator it = vBuilding.begin(); it != vBuilding.end(); it++) { if (*it != NULL) delete *it; } } public: vector<AbstractBuilding*> vBuilding; }; void test01() { Mediator* mediator = new Mediator; AbstractBuilding* building = mediator->findMyBuilding("低品質(zhì)"); if (building != NULL) { building->sale(); } else { cout << "沒有符號(hào)條件的樓盤" << endl; } } int main() { test01(); system("pause"); }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言陷阱與缺陷之?dāng)?shù)組越界訪問詳解
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的數(shù)組越界訪問,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02C語(yǔ)言實(shí)現(xiàn)520表白代碼 祝你表白成功!
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)520表白代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05利用C語(yǔ)言實(shí)現(xiàn)HashTable
根據(jù)KEY從hashtable中獲取接點(diǎn),步驟是先根據(jù)KEY計(jì)算hash值,然后從hashtable中找到指定的接點(diǎn)或者接點(diǎn)鏈表2013-09-09Linux編程實(shí)現(xiàn)制作文件的ed2k鏈
這篇文章主要介紹了Linux編程實(shí)現(xiàn)制作文件的ed2k鏈的相關(guān)資料,需要的朋友可以參考下2015-03-03C++實(shí)現(xiàn)LeetCode(191.位1的個(gè)數(shù))
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(191.位1的個(gè)數(shù)),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08C++利用std::forward_list查找插入數(shù)據(jù)方法示例
這篇文章主要給大家介紹了關(guān)于C++利用std::forward_list查找插入數(shù)據(jù)的相關(guān)資料,文中先對(duì)std::forward_list進(jìn)行了詳細(xì)的介紹,而后通過示例代碼給大家介紹了查找的方法,需要的朋友可以參考借鑒,下面話不多說了,來(lái)一起看看吧。2017-08-08C++編程中的const關(guān)鍵字常見用法總結(jié)
這篇文章主要介紹了C++編程中的const關(guān)鍵字常見用法總結(jié),const關(guān)鍵字的使用是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-11-11Visual?Studio?2022使用MinGW來(lái)編譯調(diào)試C/C++程序的圖文教程
這篇文章主要介紹了Visual?Studio?2022使用MinGW來(lái)編譯調(diào)試C/C++程序,以實(shí)例來(lái)簡(jiǎn)單介紹一下VS2022中如何使用MinGW來(lái)編譯、調(diào)試C/C++程序,需要的朋友可以參考下2022-08-08C/C++ Zlib庫(kù)封裝MyZip壓縮類的詳細(xì)過程
在軟件開發(fā)中,文件的壓縮和解壓縮是一項(xiàng)常見的任務(wù),而ZIP是一種被廣泛應(yīng)用的壓縮格式,本文將聚焦于一個(gè)簡(jiǎn)化的C++實(shí)現(xiàn),通過分析代碼,我們將深入了解其設(shè)計(jì)和實(shí)現(xiàn)細(xì)節(jié),感興趣的朋友一起看看吧2023-11-11C++?AVL樹插入新節(jié)點(diǎn)后的四種調(diào)整情況梳理介紹
AVL樹是高度平衡的而二叉樹,它的特點(diǎn)是AVL樹中任何節(jié)點(diǎn)的兩個(gè)子樹的高度最大差別為1,本文主要給大家介紹了C++如何實(shí)現(xiàn)AVL樹,需要的朋友可以參考下2022-08-08