为一套子系统提供一个统一的界面(Facade)
#include <iostream>
struct BytecodeStream {};
struct Scanner
{
Scanner(std::istream& input) : _inputStream(input) {}
virtual ~Scanner() = default;
private:
std::istream& _inputStream;
};
struct ProgramNodeBuilder;
struct Parser
{
Parser() = default;
virtual ~Parser() = default;
virtual void Parse(Scanner&, ProgramNodeBuilder&) {}
};
struct ProgramNode;
//Visitor pattern
struct CodeGenerator
{
virtual void Visit(ProgramNode*) {}
CodeGenerator(BytecodeStream& output) : _output(output) {}
private:
BytecodeStream& _output;
};
//Composite pattern
struct ProgramNode
{
virtual void Add(ProgramNode*) {}
virtual void Remove(ProgramNode*) {}
virtual void Traverse(CodeGenerator&) {}
};
//Builder pattern
struct ProgramNodeBuilder
{
ProgramNodeBuilder() = default;
};
struct Compiler
{
Compiler() = default;
virtual void Compile(std::istream& input, BytecodeStream& output)
{
Scanner scanner(input);
ProgramNodeBuilder builder;
Parser parser;
parser.Parse(scanner, builder);
CodeGenerator generator(output);
}
};
int main()
{
BytecodeStream output;
Compiler compiler;
compiler.Compile(std::cin, output);
}