二十三、解释器模式
解释器模式(Interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
java:
package com.shuang.interpreter;
public class Context {
private int num1;
private int num2;
public int getNum1() {
return num1;
}
public void setNum1(int num1) {
this.num1 = num1;
}
public int getNum2() {
return num2;
}
public void setNum2(int num2) {
this.num2 = num2;
}
public Context(int num1, int num2) {
super();
this.num1 = num1;
this.num2 = num2;
}
}
package com.shuang.interpreter;
public interface Expression {
public int interpret(Context context);
}
package com.shuang.interpreter;
public class Minus implements Expression {
@Override
public int interpret(Context context) {
return context.getNum1() - context.getNum2();
}
}
package com.shuang.interpreter;
public class Plus implements Expression {
@Override
public int interpret(Context context) {
return context.getNum1() + context.getNum2();
}
}
package com.shuang.interpreter;
public class Test {
public static void main(String[] args) {
int result = new Minus().interpret((new Context(new Plus().interpret(new Context(9, 2)), 8)));
System.out.println(result);
}
}
c++:
#include<iostream>
using namespace std;
class Context
{
public:
Context(int num)
{
this->m_num = num;
}
int getNum()
{
return m_num;
}
int getRes()
{
return m_res;
}
void setNum(int num)
{
this->m_num = num;
}
void setRes(int res)
{
this->m_res = res;
}
private:
int m_num;
int m_res;
};
class Expression
{
public:
virtual void interpreter(Context *context) = 0;
private:
Context *m_context;
};
class PlusExpression : public Expression
{
public:
PlusExpression()
{
this->context = NULL;
}
virtual void interpreter(Context *context)
{
int num = context->getNum();
num ++;
context->setNum(num);
context->setRes(num);
}
private:
Context *context;
};
class MinusExpression : public Expression
{
public:
MinusExpression()
{
this->context = NULL;
}
virtual void interpreter(Context *context)
{
int num = context->getNum();
num --;
context->setNum(num);
context->setRes(num);
}
private:
Context *context;
};
int main()
{
Expression *expression = NULL;
Context *context = NULL;
context = new Context(10);
cout << context->getNum() <<endl;
expression = new PlusExpression;
expression->interpreter(context);
cout << context->getRes() <<endl;
Expression *expression2 = NULL;
expression2 = new MinusExpression;
expression2->interpreter(context);
cout << context->getRes() <<endl;
system("pause");
return 0;
}