迪米特原则
来源:互联网 发布:软件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;
}
#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;
}
阅读全文
0 0
- 迪米特原则
- 迪米特原则
- 设计原则之迪米特原则
- 面向对象六大原则----接口隔离原则,迪米特原则
- 设计模式原则(6):迪米特原则
- 面向对象六大原则--迪米特原则
- 六大设计原则之迪米特原则
- 设计模式-迪米特原则、开闭原则
- 面向对象设计原则之迪米特原则
- 设计模式原则—迪米特原则
- 六大设计原则之迪米特原则
- 迪米特原则LOD
- 设计原则-迪米特法则
- 原则
- 原则
- 原则
- 原则
- 原则
- 数据结构实验报告(三)
- 电脑常用快捷键
- Android_面试经验总结
- oozie开启hcatUrl依赖hive的元数据
- Qt程序发布方法
- 迪米特原则
- Ubuntu 系统增加root用户登录
- EF Code First 学习笔记:关系
- mdf数据库附加的时候被拒绝的处理方法
- FreeSWITCH学习笔记 第一场 第四个镜头 局域网支持
- HTML5权威指南笔记:11-表格元素
- apache + php
- Spring基础-5-事务管理
- js获取YYYY-MM-DD HH:MM:SS时间