学了C++基本的语法都知道继承可以让子类拥有更多的功能,除了继承还有组合,委托,也能让一个类的功能增加。设计模式,这个设计是设计继承,组合,委托,之间相互叠加的方式,让其符合业务需求。
中介模式是对委托的复杂运用,比如说两个类中,类A中含类B的对象指针作为数据成员,类B中含类A的对象指针作为数据成员。在下面的例子中,中介含有租房者和房东的对象指针,租房者和房东也含有中介的对象指针。完成业务,租房者可以运用其包含的中介对象指针发送给中介包含的房东类的对象的函数成员。房东发送给租房者也一样,具体见代码。
这些代码都是在学习这些的过程中码的。。。。。
#include <iostream>
#include <string>
using namespace std;
class Mediator;
//抽象人
class Person
{
protected:
Mediator* m_mediater;//中介
public:
//设置中介
virtual void SetMediator(Mediator* mediator){}
//向中介发送信息,中介最终发给租房者或房东
virtual void SendMessage(string message){}
//从中介获得信息,该信息是租房者或房东发的信息
virtual void GetMessage(string message){}
};
//抽象中介机构
class Mediator
{
public:
//发送信息给租房者或房东
virtual void Send(string message, Person* person){}
//设置租房者
virtual void SetA(Person* A){}
//设置房东
virtual void SetB(Person* B){}
};
//租房者
class Renter : public Person
{
public:
//设置中介
void SetMediator(Mediator* mediator)
{
m_mediater = mediator;
}
//发送信息
void SendMessage(string message)
{
m_mediater->Send(message, this);
}
//获得信息
void GetMessage(string message)
{
cout << "租房者接收到信息:" << message << endl;
}
};
//房东
class Landlord : public Person
{
public:
//设置中介
void SetMediator(Mediator* mediator)
{
m_mediater = mediator;
}
//发送信息
void SendMessage(string message)
{
m_mediater->Send(message, this);
}
//接受信息
void GetMessage(string message)
{
cout << "房东接收到信息:" << message << endl;
}
};
//房屋中介
class HouseMediator : public Mediator
{
private:
Person* m_A;//租房者
Person* m_B;//房东
public:
//设置租房者
void SetA(Person* A)
{
m_A = A;
}
//设置房东
void SetB(Person* B)
{
m_B = B;
}
void Send(string message, Person* person)
{
if (person == m_A)//租房者给房东发信息
{
m_B->GetMessage(message);
}
else
{
m_A->GetMessage(message);
}
}
};
void test01()
{
Mediator* mediator = new HouseMediator;
Person* renter = new Renter;
Person* landlord = new Landlord;
mediator->SetA(renter);
mediator->SetB(landlord);
renter->SetMediator(mediator);
landlord->SetMediator(mediator);
renter->SendMessage("我想在宝安租房子,880一月\n");
landlord->SendMessage("出租房子:宝安,1000一月");
}
int main(void)
{
test01();
system("pause");
return 0;
}