解释器模式
(Interpreter Pattern):定义了一种文法,并且对于任何该文法的句子,都能够解释和执行。
可以将复杂的问题分解成一系列简单的表达式,然后使用解释器来解释这些表达式。
涉及角色 :
抽象表达式(
Abstract Expression):定义一个抽象的解释操作,通常包含一个interpret()方法,用于解释语句。
终结符表达式
(Terminal Expression):实现抽象表达式中的interpret()方法,表示语言中的终结符。
非终结符表达式
(Non-terminal Expression):实现抽象表达式中的interpret()方法,表示语言中的非终结符。
上下文
(Context):包含解释器解释的信息的类。
客户端
(Client):创建并配置表达式的类。
示例
:定义了抽象表达式Expression、终结符表达式NumberExpression、非终结符表达式AddExpression以及上下文Context。通过这些类的协作,我们可以解释一个简单的加法表达式,并输出计算结果
java
// 上下文
public class Context {
private String input;
private int output;
public Context(String input) {
this.input = input;
}
public String getInput() {
return input;
}
public void setInput(String input) {
this.input = input;
}
public int getOutput() {
return output;
}
public void setOutput(int output) {
this.output = output;
}
}
// 抽象表达式
interface Expression {
int interpret(Context context);
}
// 终结符表达式
class NumberExpression implements Expression {
private int number;
public NumberExpression(int number) {
this.number = number;
}
@Override
public int interpret(Context context) {
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(Context context) {
return left.interpret(context) + right.interpret(context);
}
}
// 客户端
public class InterpreterPatternTest {
public static void main(String[] args) {
Context context = new Context("1 + 2 + 3");
Expression expression = new AddExpression(new NumberExpression(1), new AddExpression(new NumberExpression(2), new NumberExpression(3)));
int result = expression.interpret(context);
System.out.println("Result: " + result);
}
}