迪米特原则

来源:互联网 发布:软件license 设计方案 编辑:程序博客网 时间:2024/06/05 09:13
#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;
}
原创粉丝点击