解释器模式
一、简介
定义:给定一个语言,定义它的文法的一种表示并定义一个解释器,该解释器使用该表示来解释语言中的句子。
该模式涉及的编程语言理论知识较多,实际运用并不常见。主要用在 SQL 解析、符号处理引擎等
二、简单实现
这里以对算数表达式的解释为例。
//抽象解释器
public abstract class ArithmeticExpression{
public abstract int interpret();
}
//数字解释器
public class NumberExpression extends ArithmeticExpression{
private int num;
public NumberExpression(int num) {
this.num = num;
}
@Override
public int interpret() {
return num;
}
}
//运算符抽象解释器
public abstract class OperatorExpression extends ArithmeticExpression{
protected ArithmeticExpression exp1,exp2;
public OperatorExpression(ArithmeticExpression exp1, ArithmeticExpression exp2) {
this.exp1 = exp1;
this.exp2 = exp2;
}
}
//加法解释器
public class AddExpression extends OperatorExpression{
public AddExpression(ArithmeticExpression exp1, ArithmeticExpression exp2) {
super(exp1, exp2);
}
@Override
public int interpret() {
return exp1.interpret()+exp2.interpret();
}
}
public class Calculator{
private Stack<ArithmeticExpression> stack=new Stack<>();
public Calculator(String expression ) {
ArithmeticExpression exp1,exp2;
String [] elements=expression.split(" ");
for (int i = 0; i < elements.length; i++) {
switch (elements[i].charAt(0)){
case '+':
exp1=stack.pop();
exp2=new NumberExpression(Integer.valueOf(elements[++i]));
stack.push(new AddExpression(exp1,exp2));
break;
default:
stack.push(new NumberExpression(Integer.valueOf(elements[i])));
break;
}
}
}
public int calculate(){
return stack.pop().interpret();
}
}