设计模式中结构型模式(五)外观模式(Facade)

系统 1353 0

为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更容易使用。将一个系统划分成为若干个子系统有利于降低系统的复杂性。一个常见的设计目标浊使子系统间的通信和相互依赖关系达到最小。达到该目标的途径之一是就是引入一个外观(facade)对象,它为子系统中较一般的设施提供了一个单一而简单的界面。在遇到以下情况使用Facade模式1、当你要为一个复杂子系统提供一个简单接口时。2、客户程序与抽象类的实现部分之间存在着很大的依赖性。3、当你需要构建一个层次结构的子系统时,使用facade模式定义子系统中每层的入口点。Facade模式有下面的一些优点:

1、它对客户屏蔽子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。

2、它实现了子系统与客户之间的松藕合关系,而子系统内部的功能组件往往是紧藕合的。

3、如果应用需要,它并不限制它们使用子系统类。

以下为部分代码(待补全)

// Facade.h:interfacefortheFacadeclass.
//
/**/ ///////////////////////////////////////////////////////////////////// /
#pragma once

#include
" ../TestBasicClass/BasicClass.h "
class ProgramNode
... {
public :
// programnodemanipulation
virtual void GetSourcePosition( int & line, int & index);

// childmanipulation
virtual void Add(ProgramNode * );
virtual void Remove(ProgramNode * );

virtual void Traverse(CodeGenerator & );
protected :
ProgramNode();

}
;

class ProgramNodeBuilder
... {
public :
ProgramNodeBuilder();

virtual ProgramNode * NewVarible( const char * variableName) const ;

virtual ProgramNode * NewAssignment(ProgramNode * variable,
ProgramNode
* expression) const ;

virtual ProgramNode * NewReturnStatement(ProgramNode * value) const ;

virtual ProgramNode * NewCondition(
ProgramNode
* condition,
ProgramNode
* truePart,ProgramNode * falsePart) const ;

ProgramNode
* GetRootNode();
private :
ProgramNode
* _node;
}
;


class Scanner
... {
public :
Scanner(istream
& );
virtual ~ Scanner();

virtual Token & Scan();
private :
istream
& _inputStream;
}
;

class Parser
... {
public :
Parser();
virtual ~ Parser();

virtual void Parser(Scanner & ,ProgramNodeBuilder & );
}
;

class CodeGenerator
... {
public :
virtual void Visit(StatementNode * );
virtual void Visit(ExpressionNode * );

protected :
CodeGenerator(BytecodeStream
& );
protected :
BytecodeStream
& _output;
}
;

void ExpressionNode::Traverse(CodeGenerator & cg)
... {
cg.Visit(
this );

ListIterator
< ProgramNode *> i(_children);

for (i.First(); ! i.IsDone();i.Next())
... {
i.CurrentItem()
-> Traverse(cg);
}

}



class Compiler
... {
public :
Compiler();
virtual void Compiler(istream & ,BytecodeStream & );
}
;

void Compiler::Compiler(istream & input,BytecodeStream & output)
... {
Scannerscanner(input);
ProgramNodeBuilderbuilder;
Parserparser;

parser.Parser(scanner,builder);

RISCCodeGeneratorgenerator(output);
ProgramNode
* parseTree = builder.GetRootNode();
parseTree
-> Traverse(generator);
}

设计模式中结构型模式(五)外观模式(Facade)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论