ڼС
梦回起点
做你害怕做的事,你会发现:不过如此
本站基于WordPress—主题by 设计窝
冀ICP备15003737号
梦回起点
Copyright © 2015-2024 All rights reserved.

解释器模式——大话设计模式读书笔记

解释器模式(interpreter):给定一个语言,定义一个它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

下面是解释器模式的UML图:

解释器模式

下面是C++描述的代码:


/*
 * Copyright (c) 2018 initm.com All rights reserved.
 * 作者: Stupid
 * 描述: 解释器模式
 * 完成时间: 2018-1-14 21:01
*/
#include <QCoreApplication>
#include <iostream>
#include <cstdlib>
#include <string>
#include <list>

class Context{
private:
    std::string input;
    std::string output;

public:
    std::string getInput() const{
        return input;
    }

    void setInput(const std::string &value){
        this->input = value;
    }

    std::string getOutput() const{
        return output;
    }

    void setOutput(const std::string &value){
        this->output = value;
    }

};

class AbstractExpression{
public:
    virtual void Interpret(Context*) = 0;

};

class TerminalExpression: public AbstractExpression{
public:
    void Interpret(Context*)override final{
        std::cout << "终端解释器" << std::endl;
    }

};

class NonterminalExpreesion: public AbstractExpression{
public:
    void Interpret(Context*){
        std::cout << "非终端解释器" << std::endl;
    }

};

int main(int argc, char *argv[])
{
    system("chcp 65001");
    QCoreApplication a(argc, argv);

    Context* context = new Context();
    std::list<AbstractExpression*> list;
    list.push_back(new TerminalExpression());
    list.push_back(new NonterminalExpreesion());
    list.push_back(new TerminalExpression());
    list.push_back(new TerminalExpression());

    for (auto index: list){
        index->Interpret(context);
    }

    return a.exec();
}
2018-01-14
                         
暂无评论

发表回复