facade模式意图是为一组接口提供一个高层接口,比如通过这一组接口实现某种功能统一成一个接口。考虑一个编译器,涉及词法分析,代码浏览,编译等子系统,用户也许并不关心实现的细节,而只想编译生成目标文件连接成可执行文件。为此,我们可以提供一个高层次接口,同时屏蔽词法分析,编译等子系统的具体实现,用户通过这个单一简单的接口实现预想的功能即可。
这种模式使得客户和子系统实现松耦合,对子系统的修改对客户代码不影响,减少编译依赖性,同时也并不限制子系统类的使用。
示例代码如下:
class scanner {
public:
void scan(){ printf("scanning..\n"); };
};
class parser {
public:
void parse() { printf("parsing..\n"); };
};
class builder {
public:
void build() { printf("building..\n"); };
};
class compiler {
public:
void compile()
{
scanner aScanner;
parser aPaser;
builder aBuilder;
aScanner.scan();
aPaser.parse();
aBuilder.build();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
compiler aCompiler;
aCompiler.compile();
getchar();
return 0;
}