二十三、解释器模式

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