解释器模式

#include <iostream>
#include <memory>

class Context {
public:
    std::string getData() { return data_; }
    void setData(std::string data) { this->data_ = data; }
private:
    std::string data_;
};

class AbstractExpression {
public:
    virtual void interprete(std::shared_ptr<Context> c) = 0;
};

class TerminalExpression : public AbstractExpression {
public:
    void interprete(std::shared_ptr<Context> c) override {
        std::string data = c->getData();
        std::cout << "In TerminalExpression interpreter(). The data is " << data << std::endl;
    }
};

class NonterminalExpression : public AbstractExpression {
public:
    void interprete(std::shared_ptr<Context> c) override {
        std::string data = c->getData();
        std::cout << "In NonterminalExpression interpreter(). The data is " << data << std::endl;
    }
};

int main(int argc, char *argv[]){
    std::string s = "ABC";
    std::shared_ptr<Context> c = std::make_shared<Context>();
    c->setData(s);
    std::shared_ptr<AbstractExpression> te = std::make_shared<TerminalExpression>();
    std::shared_ptr<AbstractExpression> ne = std::make_shared<NonterminalExpression>();
    te->interprete(c);
    ne->interprete(c);
    return 1;
}

  

posted @ 2022-02-28 10:36  南乡水  阅读(22)  评论(0编辑  收藏  举报