行为型模式 - 解释器模式 (Interpreter Pattern)
解释器模式是一种行为设计模式,它定义了一个语言的文法,并且建立一个解释器来解释该语言中的句子。
需求描述:
实现一个简单的数学表达式解释器,支持加法和减法运算。例如,对于表达式 "3 + 5 - 2",能够正确计算出结果。
java
import java.util.Stack;
// 抽象表达式接口
interface Expression {
int interpret();
}
// 数字表达式类
class NumberExpression implements Expression {
private int number;
public NumberExpression(int number) {
this.number = number;
}
@Override
public int interpret() {
return number;
}
}
// 加法表达式类
class AddExpression implements Expression {
private Expression left;
private Expression right;
public AddExpression(Expression left, Expression right) {
this.left = left;
this.right = right;
}
@Override
public int interpret() {
return left.interpret() + right.interpret();
}
}
// 减法表达式类
class SubtractExpression implements Expression {
private Expression left;
private Expression right;
public SubtractExpression(Expression left, Expression right) {
this.left = left;
this.right = right;
}
@Override
public int interpret() {
return left.interpret() - right.interpret();
}
}
// 解释器类
class ExpressionParser {
public Expression parse(String expression) {
String[] tokens = expression.split(" ");
Stack<Expression> stack = new Stack<>();
for (String token : tokens) {
if (isNumber(token)) {
stack.push(new NumberExpression(Integer.parseInt(token)));
} else if (token.equals("+")) {
Expression right = stack.pop();
Expression left = stack.pop();
stack.push(new AddExpression(left, right));
} else if (token.equals("-")) {
Expression right = stack.pop();
Expression left = stack.pop();
stack.push(new SubtractExpression(left, right));
}
}
return stack.pop();
}
private boolean isNumber(String token) {
try {
Integer.parseInt(token);
return true;
} catch (NumberFormatException e) {
return false;
}
}
}
// 客户端代码
public class MathExpressionInterpreter {
public static void main(String[] args) {
String expression = "3 + 5 - 2";
ExpressionParser parser = new ExpressionParser();
Expression exp = parser.parse(expression);
int result = exp.interpret();
System.out.println(expression + " = " + result);
}
}