九
14
定义
为子系统中的一组接口提供一个一致的界面,外观(Facade)模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
结构

理解
1. Facade提供一个高层接口,将客户的请求代理给适合的子系统(Subsystem)对象,Facade知道子系统的哪些对象来处理请求。
2. Subsystem是一系列类的集合,处理Facade指派的任务。Subsystem不知道Facade的信息。
要点
1. 一个复杂的系统包括若干个子系统,Facade模式为复杂子系统提供一个简单而统一的接口。譬如编译系统包括代码扫描、语法分析、代码生成等流程,每一个流程可以成为一个子系统。客户编译代码并不想知道具体的细节流程,Facade模式封装一套标准编译流程,就屏蔽了编译的具体流程, 简化了客户调用。下图可以看出应用Facade场景:

2. 提高子系统的独立性和可移植性。客户程序与抽象类的实现部分之间存在着很大的依赖性。引入Facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
3. 当你需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,你可以让它们仅通过Facade进行通讯,从而简化了它们之间的依赖关系。
应用
源码以编译系统的例子说明外观模式。
源码
#include <iostream>
#include <string>
using namespace std;
//代码扫描读入
class CCodeScanner
{
public:
void Scan()
{
cout << "scan code" << endl;
}
};
//语法分析
class CCodeParser
{
public:
void Parse()
{
cout << "parse code" << endl;
}
};
//代码生成
class CCodeGenerator
{
public:
void Generate()
{
cout << "generate code" << endl;
}
};
//Facade
class CCompiler
{
public:
//更高层的统一接口
void Compile()
{
cout << "compile program…" << endl;
CCodeScanner scanner;
scanner.Scan();
CCodeParser parser;
parser.Parse();
CCodeGenerator generator;
generator.Generate();
}
};
int main()
{
CCompiler compiler;
compiler.Compile();
return 0;
}
转载本站文章请注明,转载自:神秘果
本文链接: http://www.shenmiguo.com/archives/2009/308_design-patterns-facade.html

十二月 23rd, 2011 at 22:34
And to think I was going to talk to smeoone in person about this.
十二月 24th, 2011 at 17:06
X23E6W uarctspwdemc
十二月 25th, 2011 at 00:47
Hj7iia , [url=http://ntyxqtorslqr.com/]ntyxqtorslqr[/url], [link=http://jfecbtixvcjz.com/]jfecbtixvcjz[/link], http://hwctgfvgtxsa.com/
十二月 25th, 2011 at 18:26
1ujtay mybtjungqyhp
十二月 25th, 2011 at 22:28
P76rXe , [url=http://hlmhsbjvzppa.com/]hlmhsbjvzppa[/url], [link=http://gfioudlnmrxk.com/]gfioudlnmrxk[/link], http://lfhdldkriyru.com/