设计模式简单代码之Facade模式(编译系统篇)

/**********************************************************************************************************/
* 作者:一雨田(http://blog.csdn.net/dylgsy/)。本文可随便转贴,但请保留此信息

* Facade 模式:

* 门面模式,为外界提供一个统一的、简单的接口,以便客户程序能非常方便的使用。把复杂的处理过程隐藏起来

* Facade 模式主要是为调用者提供方便,要什么样的接口应该由客户那边去规定。

* Facade 模式有个特点,就是由它包装的接口,在内部都有一些比较混杂的操作(内部是由好多对象协作而完成的)。

* 另外使用Facade模式还可以对熟悉内部操作的用户开放底层的功能。
/**********************************************************************************************************/

/**********************************************************************************************************/
* 实例:

* 这里就使用《设计模式》书里给出的例子吧,这是一个编译器的例子。我们使用编译器,只需要指定源文件的路径和目标

* 文件的路径就可以了,编译器内部所做的事情对我们来说是透明的。

* 编译器内部所做的事情可能有:

* 词法分析、语法分析、语义分析、代码优化、代码生成等,下面我们来模拟

* 这个例子只是为展示Facade 模式,所以编译器的编译过程被简化了
/**********************************************************************************************************/

#include <iostream>
using namespace std;

// 扫描器
class CScanner
{
public:
 void Scan(char *lpszInput)
 {
  cout << "正在扫描文件:" << lpszInput << endl;
 }
};

// 分析器
class CParser
{
public:
 void Parse(char *lpszInput)
 {
  cout << "正在分析文件:" << lpszInput << endl;
 }
};

// 代码生成器
class CCodeGenerator
{
public:
 void CodeGen(char *lpszOutput)
 {
  cout << "正在生成代码到文件:" << lpszOutput << endl;
 }
};


// 提供一个门面(编译器)
class CCompiler
{
public:
 void Compile(char *lpszInput, char *lpszOutput)
 {
  _s.Scan(lpszInput);
  _p.Parse(lpszInput);
  _c.CodeGen(lpszOutput);
 }
private:
 CScanner _s;
 CParser _p;
 CCodeGenerator _c;
};


// 使用编译系统:这个系统包括扫描器、分析器、生成器。并且提供了一个门面接口Compiler
void main()
{
 CCompiler compiler;
 compiler.Compile("123.cpp", "123.exe");
}
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值