Java設計模式中的解釋器模式(Interpreter Pattern)是一種行為型設計模式,它定義了一種語言文法并定義該語言文法的解釋器,用于解釋語言中的表達式。
在解釋器模式中,通常會定義一個抽象表達式類,具體表達式類繼承抽象表達式類,并實作表達式的解釋方法。另外,還會定義一個環境類,用于儲存解釋器的上下文資訊。
解釋器模式常用于編譯器、解析器等場景,例如編譯器中的詞法分析器和文法分析器。
下面是一個簡單的Java代碼示例,展示了解釋器模式的基本結構:
// 抽象表達式類
abstract class Expression {
public abstract boolean interpret(String context);
}
// 終結符表達式類
class TerminalExpression extends Expression {
private String data;
public TerminalExpression(String data) {
this.data = data;
}
public boolean interpret(String context) {
if (context.contains(data)) {
return true;
}
return false;
}
}
// 非終結符表達式類
class OrExpression extends Expression {
private Expression expr1 = null;
private Expression expr2 = null;
public OrExpression(Expression expr1, Expression expr2) {
this.expr1 = expr1;
this.expr2 = expr2;
}
public boolean interpret(String context) {
return expr1.interpret(context) || expr2.interpret(context);
}
}
// 環境類
class Context {
private String context;
public Context(String context) {
this.context = context;
}
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
}
// 用戶端代碼
public class InterpreterPatternDemo {
public static void main(String[] args) {
Expression terminal1 = new TerminalExpression("Hello");
Expression terminal2 = new TerminalExpression("World");
Expression or = new OrExpression(terminal1, terminal2);
Context context1 = new Context("Hello World!");
Context context2 = new Context("Goodbye World!");
System.out.println(or.interpret(context1.getContext())); // true
System.out.println(or.interpret(context2.getContext())); // true
}
}
在這個示例中,Expression是抽象表達式類,TerminalExpression和OrExpression是具體表達式類。TerminalExpression表示終結符表達式,OrExpression表示非終結符表達式。
Context是環境類,用于儲存解釋器的上下文資訊。
用戶端代碼建立了一個OrExpression對象,并将其解釋應用于兩個不同的上下文(context1和context2),輸出結果表明解釋器能夠正确地解釋表達式。