门面模式又称外观模式:主要思想就是用一个提供些专门进行对外访问的接口,避免外部程序直接调用内部方法,对内部方法进行有效的屏蔽。
以医院为例 : (转自 菜鸟教程)
一个医院的系统功能有多种,如果让病人直接访问这些功能就会显得杂乱无章,不易管理。其次,如果医院系统的功能发生变动,有可能病人的访问行为也要跟着改变。
而门面模式就相当于医院的接待员。病人只需要访问接待员了解自己想要的功能就行,不需要知道医院内部功能具体需要访问哪一个类。类似与三层架构里的BLL业务层 2、充当着DAL(Data Access Layer,数据访问层)和UI(User Interface)表示层的连接桥梁。
类似的门面模式:
class ModuleA{
public:
void call(string id);
private:
void test1();
void test2();
}
class ModuleB{
public:
bool put();
private:
void test1();
void test2();
}
class Facade{
ModuleB moduleB;
ModuleA moduleA;
public:
void callModuleA(string id){
return moduleA.call(id);
}
void putModuleB(string content){
.....
bool flag = moduleB.put();
.....
}
}
用户只需要直接使用Facade类就可以间接的使用其他类的功能。