C++设计模式-外观模式

转: http://www.shenmiguo.com/archives/2009/308_design-patterns-facade.html/comment-page-1

C++设计模式-外观

定义

为子系统中的一组接口提供一个一致的界面,外观(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;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值