C++实现设计模式——门面(Facade)模式
- Facade模式定义
(Facade)门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面(Facade)对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。
- Facade模式例子
日常生活中其实很多地方都用到了门面模式的思想:
- 比如包工头,他担任的就是一个门面角色,他的出现不需要我们再去个木匠,瓦匠,油漆匠打交道,我们只需要和他进行对接。
- 再比如现在的很多接待员,我们和接待员打交道,然后接待员再去和对应的部门进行沟通。
这些都是门面模式的体现,共同点就是用一个门面角色来担任客户和各个子模块间的沟通桥梁,实现了子模块与客户端的解耦。
-
Facade模式应用场景
- 当要为一个复杂子系统提供一个简单接口时可以使用外观模式。
- 减小客户程序与多个子系统之间存在的依赖性。
- 在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度。
- Facade模式结构图
- Facade模式代码示例
#include <iostream>
using namespace std;
class Mod1 {
public:
Mod1(){}
~Mod1(){}
void Operation(){
cout <<"Mod1:Operation"<<endl;
}
};
class Mod2 {
public:
Mod2(){}
~Mod2(){}
void Operation(){
cout <<"Mod2:Operation"<<endl;
}
};
class Facade {
public:
Facade() {
this->_subm1 = new Mod1();
this->_subm2 = new Mod2();
}
~Facade(){
delete _subm1;
_subm1 = NULL;
delete _subm2;
_subm2 = NULL;
}
void Operation1() {
_subm1->Operation();
}
void Operation2() {
_subm2->Operation();
}
private:
Mod1* _subm1;
Mod2* _subm2;
};
int main(int argc,char* argv[]) {
Facade* f = new Facade();
f->Operation1();
f->Operation2();
return 0;
}