解释模式-解释器
目前没有想到其他更好的例子。 以后,正文一定要重写,或者尽量介绍清楚.目前只是复制了iluwatar大神的代码,作为练习,也方便自己以后找本段代码。
快速界面
表达式的统一定义。
公共界面快速{
@Override
}
//*
publicclassplusexpressionimplementsexpression {
私有expressionleftexpression;
私有expressionrightexpression;
publicplusexpression (expressionleftexpression,Expression rightExpression ) {
this.left expression=left expression;
this.right expression=right expression;
}
@Override
公共int interpret
return leftExpression.interpret () rightExpression.interpret;
}
@Override
公共字符串
返回' ';
}
}
MINUS表达式类
减法公式。
//*
publicclassminusexpressionimplementsexpression {
私有expressionleftexpression;
私有expressionrightexpression;
publicminusexpression (expressionleftexpression,Expression rightExpression ) {
this.left expression=left expression;
this.right expression=right expression;
}
@Override
公共int interpret
returnleftexpression.interpret (-right expression.interpret );
}
@Override
公共字符串
返回'-';
}
}
多表达式类
乘法公式。
//*
publicclassmultiplyexpressionimplementsexpression {
私有expressionleftexpression;
私有expressionrightexpression;
publicmultiplyexpression (expressionleftexpression,Expression rightExpression ) {
this.left expression=left expression;
this.right expression=right expression;
}
@Override
公共int interpret
returnleftexpression.interpret (* right expression.interpret );
}
@Override
公共字符串
返回' * ';
}
}
数字也是公式。 也称为句子的要素
//*
publicclassnumberexpressionimplementsexpression {
私有输入编号;
公共符号表达式(int number )。
this.number=number;
}
publicnumberexpression(strings ) (
this.number=integer.parseint(s;
}
@Override
公共int interpret
返回编号;
}
@Override
公共字符串
返回编号;
}
}
APP系
鳗鱼池/场景模拟
import java.util.Stack;
公共类app {
publicstaticvoidmain (stringsfdbbzargs ) (
堆栈堆栈=new stack (;
字符串列表(for ) {
if(isoperator(s ) ) }
expressionrightexpression=stack.pop (;
expressionleftexpression=stack.pop (;
leftExpression.interpret (,rightExpression.interpret ) );
expression operator=getoperatorinstance (s,leftExpression,rightExpression );
stack.push(resultexpression;
} else {
expression I=new number expression (s;
sack.push(I;
}
}
}
privatestaticbooleanisoperator{
return s.equals (' )|s.equals('-' ) * );
}
privatestaticexpressiongetoperatorinstance (strings,Expression left,Expression right ) {
switch(s ) {
case ' ':
returnnewplusexpression(left,right );
case '-':
returnnewMinusexpression(left,right );
case '*':
returnnewmultiplyexpression (left,right );
默认:
returnnewmultiplyexpression (left,right );
}
}
}
鳗鱼池塘的结果是: