迪米特原則

#include<iostream>
#include<string>
#include<vector>
using namespace std;


//迪米特法則 又叫最少知識原則
//如一個人買房子看樓盤。他不需要和樓盤A,樓盤B,樓盤C打交道,只需要和一箇中間層進行交互就好,這個中間層他知道哪個樓盤好,哪個樓盤差。
//這樣操作可以降低用戶和樓盤的耦合關係。


//抽象基類
class AbstractBuilding
{
public:
virtual void Sale() = 0;
    virtual string getQuality() = 0;
};


class Building_A : public AbstractBuilding
{
public:
Building_A()
{
m_Qulity="高品質";
}
virtual void Sale()
{
cout<< "樓盤A" << m_Qulity << "被售賣"<< endl;
}
virtual string getQuality()
{
return m_Qulity;
}
public:
string m_Qulity;
};
class Building_B : public AbstractBuilding
{
public:
Building_B()
{
m_Qulity="低品質";
}
virtual void Sale()
{
cout<< "樓盤B" << m_Qulity << "被售賣"<< endl;
}
virtual string getQuality()
{
return m_Qulity;
}
public:
string m_Qulity;
};
//客戶端
void test01()
{
Building_A* ba = new Building_A;
if(ba->m_Qulity=="低品質")
ba->Sale();


Building_B* bb = new Building_B;
if(bb->m_Qulity=="低品質")
bb->Sale();
}
//中介類
class Mediator{
public:
Mediator()//往裏面加樓盤A,B,C。。。。
{
AbstractBuilding* building = new Building_A;
vBuilding.push_back(building);


building = new Building_B;
vBuilding.push_back(building);
}
~Mediator()//釋放空間,避免內存泄漏
{
for(vector<AbstractBuilding*>::iterator it = vBuilding.begin();it!=vBuilding.end();it++)
{
if(*it!=NULL)
delete *it;
}
}
//對外提供統一接口
AbstractBuilding* findMyBuilding(string quality)
{
for(vector<AbstractBuilding*>::iterator it = vBuilding.begin();it!=vBuilding.end();it++)
{
if((*it)->getQuality() == quality)
return *it;
}
return NULL;
}
public:
vector<AbstractBuilding*> vBuilding;
};
void test02()
{
Mediator* mediator = new Mediator;
AbstractBuilding* building = mediator->findMyBuilding("高品質");
if(building!=NULL)
{
building->Sale();
}
else
{
cout<<"沒有符合您條件的樓盤"<<endl;
}
}
int main(void)
{ test01();
test02();
system("pause");
return 0;
}
發佈了32 篇原創文章 · 獲贊 5 · 訪問量 6578
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章