Example of C++ Design pattern Demeter's Rule

  • 2020-06-12 10:11:51
  • OfStack

Law of Demeter, also known as the least knowledge rule, says that an object should know as little as possible about other objects and not talk to strangers. English abbreviation: LoD.

Class design interface as far as possible to encapsulate perfect, so that the external direct call


#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 = " The high quality ";
 }
 
 virtual void sale()
 {
 cout << " building A" << mQulity << " By selling !" << endl;
 }
 
 virtual string getQuality()
 {
 return mQulity;
 }
 
public:
 string mQulity;
};
 
 
class BuildingB :public AbstractBuilding
{
public:
 
 BuildingB()
 {
 mQulity = " Low quality ";
 }
 
 virtual void sale()
 {
 cout << " building B" << mQulity << " By selling !" << endl;
 }
 
 virtual string getQuality()
 {
 return mQulity;
 }
 
public:
 string mQulity;
};
 
//  Intermediate class 
class Mediator
{
public:
 Mediator()
 {
 AbstractBuilding* building = new BuildingA;
 vBuilding.push_back(building);
 building = new BuildingB;
 vBuilding.push_back(building);
 }
 
 //  External interface 
 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(" Low quality ");
 
 if (building != NULL)
 {
 building->sale();
 
 }
 else
 {
 cout << " There is no sign of the condition of the building " << endl;
 }
 
}
 
int main()
{
 test01();
 system("pause");
}

Related articles: