解释模式
2020 年 09 月 16 日 230 170 字 暂无评论

01.概念

  • 一些应用提供了内建(Build-In)的脚本或者宏语言来让用户可以定义他们能够在系统中进行操作。Interpreter模式的目的就是使用一个解释器为用户提供一个一门定义语言的语法表示的解释器,然后通过这个解释器来解释语言中的句子。
  • Interpreter模式提供了这样的一个实现语法解释器的框架。

02.角色和职责

  • Context

    • 解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等。
  • AbstractExpression

    • 解释器抽象类。
  • ConcreteExpression

    • 解释器具体实现类。

03.代码案例

#include <iostream>
#include <string>

using namespace std;

class Context
{
public:
        Context(int num)
        {
                m_num = num;
        }
        void setNum(int num)
        {
                m_num = num;
        }
        int getNum()
        {
                return m_num;
        }
        void setRes(int res)
        {
                m_res = res;
        }
        int getRes()
        {
                return m_res;
        }
private:
        int m_num;
        int m_res;
};

class Expression
{
public:
        virtual void interpreter(Context* context) = 0;
private:
};

class PlusExpression : public Expression
{
public:
        virtual void interpreter(Context* context)
        {
                int num = context->getNum();
                num++;
                context->setNum(num);
                context->setRes(num);
        }
private:
};

class MinusExpression : public Expression
{
public:
        virtual void interpreter(Context* context)
        {
                int num = context->getNum();
                num--;
                context->setNum(num);
                context->setRes(num);
        }
private:
};

void main()
{
        Context* pcxt = new Context(10);
        Expression* e1 = new PlusExpression;
        e1->interpreter(pcxt);
        cout << "PlusExpression:" << pcxt->getRes() << endl;

        Expression* e2 = new MinusExpression;
        e2->interpreter(pcxt);
        cout << "MinusExpression:" << pcxt->getRes() << endl;

        delete e2;
        delete e1;
}
  • 输出
PlusExpression:11
MinusExpression:10

版权属于:zfh

本文链接:http://zfhblog.com/index.php/archives/152/



评论已关闭