定义

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

6 Responses to “C++设计模式-外观”

  1. And to think I was going to talk to smeoone in person about this.

  2. X23E6W uarctspwdemc

  3. Hj7iia , [url=http://ntyxqtorslqr.com/]ntyxqtorslqr[/url], [link=http://jfecbtixvcjz.com/]jfecbtixvcjz[/link], http://hwctgfvgtxsa.com/

  4. 1ujtay mybtjungqyhp

  5. P76rXe , [url=http://hlmhsbjvzppa.com/]hlmhsbjvzppa[/url], [link=http://gfioudlnmrxk.com/]gfioudlnmrxk[/link], http://lfhdldkriyru.com/

Trackbacks/Pingbacks

  1. vermont arlington e36 damen

Leave a Reply

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <font color="" face="" size=""> <span style="">

*