适用情境:对客户端屏蔽各个子系统的细节,使用户可以用统一的接口使用子系统.
// subsystema.h
#ifndef SUBSYSTEMA_H
#define SUBSYSTEMA_H
class SubSystemA
{
public:
SubSystemA();
void MethodA();
};
#endif // SUBSYSTEMA_H
// subsystema.cpp
#include "subsystema.h"
#include <iostream>
SubSystemA::SubSystemA()
{}
void SubSystemA::MethodA()
{
std::cout << "MethodA..." << std::endl;
}
// subsystemb.h
#ifndef SUBSYSTEMB_H
#define SUBSYSTEMB_H
class SubSystemB
{
public:
SubSystemB();
void MethodB();
};
#endif // SUBSYSTEMB_H
// subsystemb.cpp
#include "subsystemb.h"
#include <iostream>
SubSystemB::SubSystemB()
{}
void SubSystemB::MethodB()
{
std::cout << "MethodB..." << std::endl;
}
// facade.h
#ifndef FACADE_H
#define FACADE_H
#include "subsystema.h"
#include "subsystemb.h"
class Facade
{
public:
Facade();
~Facade();
void FacadeMethod();
private:
SubSystemA *m_subsysA;
SubSystemB *m_subsysB;
};
#endif // FACADE_H
// facade.cpp
#include "facade.h"
Facade::Facade()
{
m_subsysA = new SubSystemA();
m_subsysB = new SubSystemB();
}
Facade::~Facade()
{
delete m_subsysA;
delete m_subsysB;
}
void Facade::FacadeMethod()
{
m_subsysA->MethodA();
m_subsysB->MethodB();
}
客户端:
// main.cpp
#include <iostream>
#include "facade.h"
using namespace std;
int main(int argc, char *argv[])
{
Facade *facade = new Facade();
facade->FacadeMethod();
return 0;
}