行为型模式之解析器模式实现

概念

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

角色和职责

解释器模式

解释器模式结构图
Context:解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等。
AbstractExpression:解释器抽象类。
ConcreteExpression:解释器具体实现类。

案例

#include <iostream>
using namespace std;
#include "string"

class Context
{
public:
    Context(int num)
    {
        m_num = num;
    }
public:
    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 
{
puclic:
    virtual void interpreter(Context *context) = 0;
};


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

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


int main(void)
{
    Context *pcxt = new Context(100);

    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 e1;
    delete e2;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tingzhushaohua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值