设计模式
设计原则一:开闭原则
设计原则二:迪米特法则
设计原则三:合成复用原则
设计原则四:依赖倒转原则
设计模式一:简单工程模式
自上而下的软件开发流程
UML类图
UML图六种箭头的含义(泛化、实现、依赖、关联、聚合、组合)
C++11的新变化
未命名
本文档使用 MrDoc 发布
-
+
首页
设计原则二:迪米特法则
迪米特法则,叫最少知识原则(知道的越少,耦合关系就越弱)。在开发一个系统,一个子系统,当别的系统要调用你的系统的时候,那么这个时候就不要把你的细节都暴露给对方,你只需要暴露一个接口就可以了。 看图表一:  图表 1 一个人要去买楼盘(楼盘就是一个个类,可能有ABCDEF……等等有很多),当人去选楼盘的时候,需要跟每个类都打交道。这样做的话,导致人跟楼盘的耦合度过高 我们理想的方式就是“我要品质楼盘”,你把楼盘给我就行了,我不要去看那么多楼盘,你给我符合我条件的就行。这时就需要一个中介,我直接跟中介打交道,你给高品质的楼盘就行。由中介去找符合我条件的楼盘。如图表二  图表 2 ```cpp #include <iostream> #include <string> #include <vector> using namespace std; //迪米特法则,叫最少知识原则 class AbstractBuilding{ public: virtual void sale() = 0; virtual void getQuality() = 0; }; //楼盘A class BuildingA : public AbstractBuilding{ public: BuildingA(){ mQuality = "高品质"; } virtual void sale(){ cout << "楼盘A"<< mQuality << "被售卖" } virtual void getQuality(){ return mQuality; } private: string mQuality; }; //楼盘B class BuildingB : public AbstractBuilding{ public: BuildingB(){ mQuality = "低品质"; } virtual void sale(){ cout << "楼盘B"<< mQuality << "被售卖" } virtual void getQuality(){ return mQuality; } private: string mQuality; }; //中介类 //这个中介类最理想是用抽象类,让它满足开闭原则,因为会有中介A,中介B,中介C等各种中介,这里只是示例,为了少敲键盘,就直接用普通类了 class Mediator { public: Mediator(){ AbstractBuilding *building = new BuildingA; vBuidling.pushback(building); building = new BuildingB; vBuidling.pushback(building); } ~Mediator(){ for (vector<AbstractBuilding*>::iterator it = vBuidling.beging(); it != vBuidling.end(); it++){ if (*it != NULL){ delete it; } } } //对外提供接口 AbstractBuilding* findMyBuiding(string quality){ for(vector<AbstractBuilding*>::iterator it = vBuidling.beging(); it != vBuidling.end(); it++){ if ((*it)->getQuality() == quality){ return *it; } } return NULL; } private: vector<AbstractBuilding *> vBuidling; } //客户端 //客户需要买个个高品质楼盘,客户端不跟中介类打交道,跟所有的Building类打交道,耦合度太高 void test01(){ BuildingA *ba = new BuildingA; if (ba->getQuality == "高品质"){ ba->sale(); } delete ba; BuildingB *bb = new BuildingB; if (bb->getQuality == "高品质"){ bb->sale(); } } //客户端 //客户需要买个个高品质楼盘,客户端只跟中介类打交道,不再关心具体楼盘。只提出要求 void test02(){ Mediator* mediator = new Mediator; AbstractBuilding* building = mediator->findMyBuiding("高品质"); if (building != NULL){ building->sale(); } else { cout << "没有找到您要的楼盘!!" << endl; } } int main(void){ test01(); test02() return 0; } ```
admin
2024年3月19日 10:40
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码