外观模式,又称门面模式。其实是为外部访问子系统而提供的一个窗口
Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use. (要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。外观模式提供一个高层次的接口,使得子系统更易于使用。)
UML类图
C++代码实现
#include <iostream>
using namespace std;
class SubSystemA {
public:
void SubSystemOperation() { cout << "call SubSystemA::SubSystemOperation()" << endl; }
};
class SubSystemB {
public:
void SubSystemOperation() { cout << "call SubSystemB::SubSystemOperation()" << endl; }
};
class Facade {
public:
Facade() {
_pA = new SubSystemA();
_pB = new SubSystemB();
}
~Facade() {
delete _pA;
delete _pB;
}
void FacadeMethod() {
_pA->SubSystemOperation();
_pB->SubSystemOperation();
}
private:
SubSystemA* _pA;
SubSystemB* _pB;
};
#include "Facade.h"
int main()
{
Facade *pFacade = new Facade();
pFacade->FacadeMethod();
delete pFacade;
return 0;
}
外观模式不改变系统对外暴露的接口方法,只改变内部的处理逻辑,其他兄弟模块的调用产生了不同的结果。不管子系统内部是多么杂乱无章,只要有外观模式对象在,就可以做到金玉其外败絮其中。该方法是一个很好的封装方法。
外观模式的使用场景:
1,为一个复杂的模块或子系统提供一个供外界访问的接口。
2,外界对子系统的访问只要黑箱操作即可。
3,防技术水平低下的程序员给项目带来不必要的风险。实现类似沙箱的功能。