用一个中介对象来封装一系列的对象交互。中介使各个对象不需要显示地互相调用,从而使耦合松散,而且可以独立地改变它们之间的交互。
代码
#include <iostream>
#include <string>
using namespace std;
class Mediator;
class Person{ //抽象人
public:
virtual void setMediator(Mediator * m){}
virtual void sendMessage(string str) {}
virtual void getMessage(string str) {}
protected:
Mediator *mediator;
};
class Mediator{ //抽象中介
public:
virtual void setMale(Person * p) { }
virtual void setFemale(Person * p){ }
virtual void sendMessage(string str,Person *p) {}
};
class Male:public Person{ //男方
public:
void setMediator(Mediator * m){mediator = m;}
void sendMessage(string str) {
mediator->sendMessage(str,this);
}
void getMessage(string str) {
cout<<"I am Male : "<<str<<endl;
}
};
class Female:public Person{ //女方
public:
void setMediator(Mediator * m){mediator = m;}
void sendMessage(string str){
mediator->sendMessage(str,this);
}
void getMessage(string str) {
cout<<"I am Female : "<<str<<endl;
}
};
class Matchmake:public Mediator{ //红娘
public:
Matchmake():female(NULL),male(NULL){}
void setMale(Person * p) { male = p; }
void setFemale(Person * p){ female = p;}
void sendMessage(string str,Person *p) {
if (p == female){ //如果是女方,向男方发消息
male->getMessage(str);
} else if (p = male) {
female->getMessage(str);
}
}
private:
Person *female;
Person *male;
};
使用
int main(){
Mediator *mediator = new Matchmake();
Person *female= new Female();
Person *male = new Male();
female->setMediator(mediator);
male->setMediator(mediator);
mediator->setMale(male);
mediator->setFemale(female);
string str("i want a boyfriend;");
female->sendMessage(str);
male->sendMessage(str);
delete mediator;
delete female;
delete male;
return 1;
}
结果
I am Male : i want a boyfriend;
I am Female : i want a boyfriend;