作用
将某些实现隐藏起来,交给另一个类去管理,管理的类对外开放,调用的时候只需要访问这个管理类
实现
有一个活动,需要游戏服和跨服交互,需要使用这两个服的函数的时候,只需要调用管理这两个类的那个类即可(例子中main中的调用)。
//Facade.h
#include "Singleton.h"
namespace Facade
{
#include <vector>
#include <iostream>
using namespace std;
typedef int Parameter;
#define PrintVector(v) for(int i = 0; i < v.size(); ++i)\
{\
cout << v[i];\
}\
cout << endl;
class ActivityManager;
class GameServer
{
public:
void SendMessageToCrossServer(vector<Parameter>& v);
void HandlerMessageFromCrossServer(vector<Parameter>& v);
};
class CrossServer
{
public:
void SendMessageToGameServer(vector<Parameter>& v);
void HandlerMessageFromGameServer(vector<Parameter>& v);
};
class ActivityManager : public Singleton<ActivityManager>
{
public:
void SendMessageToCrossServer(vector<Parameter>& v){ _cs.HandlerMessageFromGameServer(v); }
void SendMessageToGameServer(vector<Parameter>& v){ _gs.HandlerMessageFromCrossServer(v); }
private:
CrossServer _cs;
GameServer _gs;
};
//Facade.cpp
#include "Facade.h"
namespace Facade
{
void GameServer::SendMessageToCrossServer(vector<Parameter>& v)
{
ActivityManager::GetSinglePtr()->SendMessageToCrossServer(v);
}
void GameServer::HandlerMessageFromCrossServer(vector<Parameter>& v)
{
cout << "I am Cross Server, received message :" << endl;
PrintVector(v);
}
void CrossServer::SendMessageToGameServer(vector<Parameter>& v)
{
ActivityManager::GetSinglePtr()->SendMessageToGameServer(v);
}
void CrossServer::HandlerMessageFromGameServer(vector<Parameter>& v)
{
cout << "I am Cross Server, received message :" << endl;
PrintVector(v);
}
}
//main.cpp
#include "Facade.h"
using namespace Facade;
int main(int argc, char* argv[])
{
vector<int> to_gs(6, 0);
vector<int> to_cs(5, 1);
//比如现在我们这个main是个GS,要发送消息到CS,就不用去关心CS这个类了
ActivityManager::GetSinglePtr()->SendMessageToCrossServer(to_cs);
ActivityManager::GetSinglePtr()->SendMessageToCrossServer(to_gs);
return 0;
}