解释器模式是一种行为型设计模式,它用于解释和评估语言的语法或表达式。该模式定义了一种表示语言文法的类结构,并提供了一种解释器来解释语法中的表达式。
在解释器模式中,通常有两种类型的角色:
解释器模式通过递归的方式解释表达式,将表达式转换为一系列的操作或动作。这些操作可以是简单的操作,也可以是复杂的操作,具体取决于语言的语法规则。
总结一下,解释器模式适用于需要解释和评估语言语法或表达式的场景。它可以灵活地定义语法规则,并提供了一种解释器来解释和执行这些规则。
#include <iostream>
#include <string>
using namespace std;
class Context
{
public:
(int num):m_num(num),m_res(0)
Context{
}
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
{
public:
virtual void Interpreter(Context& context) = 0;
};
//具体表达式
class PlusExpression :public Expression
{
public:
virtual void Interpreter(Context& context)
{
int num = context.GetNum();
++;
num.SetNum(num);
context.SetRes(num);
context}
};
class MinusExpression :public Expression
{
public:
virtual void Interpreter(Context& context)
{
int num = context.GetNum();
--;
num.SetNum(num);
context.SetRes(num);
context}
};
int main(int argc, char** argv)
{
(10);
Context context;
PlusExpression plusExpression;
MinusExpression minusExpression& express1 = plusExpression;
Expression& express2 = minusExpression;
Expression.Interpreter(context);
express1<< context.GetNum() << endl;//11
cout .Interpreter(context);
express2<< context.GetNum() << endl;//10
cout return 0;
}