十、Facade(外观)
情景举例:
为子系统中的一组接口提供一个一致的界面
代码示例:
/* 系统中各种类
*/
class Scanner ;
class Parser ;
class ProgramNodeBuilder ;
class ProgramNode ;
class CodeGenerator ;
class ExpressionNode : public ProgramNode ;
class RISCCodeGenerator : public CodeGenerator ;
/* 这是一个Façade类,它将上述的类集成在一起
*/
class Compiler {
public:
Compiler();
virtual void Compile(istream&, BytecodeStream&);
};
/*
*/
void Compiler::Compile (
istream& input, BytecodeStream& output
) {
Scanner scanner(input);
ProgramNodeBuilder builder;
Parser parser;
parser.Parse(scanner, builder);
RISCCodeGenerator generator(output);
ProgramNode* parseTree = builder.GetRootNode();
parseTree->Traverse(generator);
}
个人理解:
外观模式的理解相对简单,它提供了一个新类作为子系统的抽象。个人认为,可以理解为一个子系统的“门面”。它与子系统的通讯是单向的(与Mediator模式不同)它不定义新的功能,子系统也不知道Façade的存在。