解释器模式
#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; }