中介者模式 测试代码添加
parent
17ada97cf3
commit
a4f2da4a13
|
@ -39,36 +39,36 @@ private:
|
||||||
ResponsabilityChan *mHead;
|
ResponsabilityChan *mHead;
|
||||||
ResponsabilityChan *mTail;
|
ResponsabilityChan *mTail;
|
||||||
};
|
};
|
||||||
|
template<typename T>
|
||||||
class Mediator;
|
class Mediator;
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
class MediatorColleague{
|
class MediatorColleague{
|
||||||
public:
|
public:
|
||||||
MediatorColleague(std::string name,Mediator *p){
|
|
||||||
mName = name;
|
|
||||||
mMediater = p;
|
|
||||||
}
|
|
||||||
std::string GetName(){
|
std::string GetName(){
|
||||||
return mName;
|
return mName;
|
||||||
};
|
};
|
||||||
int SetMediater(Mediator* p){
|
int SetMediater(Mediator<T>* p){
|
||||||
mMediater = p;
|
mMediater = p;
|
||||||
|
|
||||||
}
|
}
|
||||||
virtual int Send(std::string colleage,T* data){
|
virtual int Send(std::string colleage,T data)=0;
|
||||||
|
virtual int Recv(std::string colleage,T data)=0;
|
||||||
|
protected:
|
||||||
|
std::string mName;
|
||||||
|
Mediator<T> *mMediater;
|
||||||
|
|
||||||
|
MediatorColleague(std::string name,Mediator<T> *p){
|
||||||
|
mName = name;
|
||||||
|
mMediater = p;
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
MediatorColleague(){
|
MediatorColleague(){
|
||||||
|
|
||||||
}
|
}
|
||||||
std::string mName;
|
|
||||||
Mediator *mMediater;
|
|
||||||
};
|
};
|
||||||
|
template <typename T>
|
||||||
class Mediator{
|
class Mediator{
|
||||||
public:
|
public:
|
||||||
virtual int Register(MediatorColleague *p){ // 注册
|
int Register(MediatorColleague<T> *p){ // 注册
|
||||||
if (nullptr == p){
|
if (nullptr == p){
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -79,11 +79,15 @@ public:
|
||||||
p->SetMediater(this);
|
p->SetMediater(this);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
virtual int Relay(MediatorColleague *p){ //转发
|
int Relay(std::string colleage,T data){ //转发
|
||||||
|
if(mColleague.find(colleage) != mColleague.end()){
|
||||||
|
MediatorColleague<T> *recvcolleage = mColleague.find(colleage)->second;
|
||||||
|
recvcolleage->Recv("",data);
|
||||||
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
std::map<std::string,MediatorColleague*> mColleague;
|
std::map<std::string,MediatorColleague<T>*> mColleague;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //GENERAL_ADAPTER_H
|
#endif //GENERAL_ADAPTER_H
|
||||||
|
|
|
@ -36,6 +36,9 @@ private:
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
/*
|
||||||
|
显示调用
|
||||||
|
*/
|
||||||
using namespace std;
|
using namespace std;
|
||||||
class Product :public CloneAble<Product>{
|
class Product :public CloneAble<Product>{
|
||||||
public:
|
public:
|
||||||
|
@ -62,7 +65,49 @@ private:
|
||||||
int mAttribute1;
|
int mAttribute1;
|
||||||
char mAttribute2;
|
char mAttribute2;
|
||||||
};
|
};
|
||||||
|
/*
|
||||||
|
* mediater test
|
||||||
|
*/
|
||||||
|
class HandleData{
|
||||||
|
public:
|
||||||
|
std::string data;
|
||||||
|
};
|
||||||
|
class Motherboard :public Mediator<HandleData>{
|
||||||
|
};
|
||||||
|
class RAM :public MediatorColleague<HandleData>{
|
||||||
|
public:
|
||||||
|
RAM(std::string name,Mediator<HandleData> *p) : MediatorColleague(name,p){
|
||||||
|
}
|
||||||
|
int Send(std::string colleage,HandleData data){
|
||||||
|
this->mMediater->Relay(colleage,data);
|
||||||
|
}
|
||||||
|
int Recv(std::string colleage,HandleData data){
|
||||||
|
std::cout<<colleage<<this->mName<<" receive data "<<data.data<<endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
class SoundCard :public MediatorColleague<HandleData>{
|
||||||
|
public:
|
||||||
|
SoundCard(std::string name,Mediator<HandleData> *p) : MediatorColleague(name,p){
|
||||||
|
}
|
||||||
|
int Send(std::string colleage,HandleData data){
|
||||||
|
this->mMediater->Relay(colleage,data);
|
||||||
|
}
|
||||||
|
int Recv(std::string colleage,HandleData data){
|
||||||
|
std::cout<<colleage<<this->mName<<" receive data "<<data.data<<endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
* mediater test end
|
||||||
|
*/
|
||||||
|
|
||||||
int main(){
|
int main(){
|
||||||
|
Motherboard mon;
|
||||||
|
SoundCard soundcard("souncard",&mon);
|
||||||
|
RAM ram("ram",&mon);
|
||||||
|
mon.Register((MediatorColleague<HandleData>*) &soundcard);
|
||||||
|
mon.Register((MediatorColleague<HandleData>*) &ram);
|
||||||
|
soundcard.Send("ram",HandleData{"ss"});
|
||||||
|
|
||||||
BridgeTest br(new MP3Player);
|
BridgeTest br(new MP3Player);
|
||||||
BridgeTest br1(new MP4Player);
|
BridgeTest br1(new MP4Player);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue