解釋器模式 為某語言定義文法表示,並提供一個解釋器,使用該表示來解釋語言中的句子。屬於行為型模式。結構包含:
interpret(Context)。// 抽象表達式
interface Expression { int interpret(Map vars); }
// 終結符:變數
class VariableExpression implements Expression {
private final String name;
public VariableExpression(String name) { this.name = name; }
public int interpret(Map vars) { return vars.get(name); }
}
// 非終結符:加法
class AddExpression implements Expression {
private final Expression left, right;
public AddExpression(Expression left, Expression right) { this.left = left; this.right = right; }
public int interpret(Map vars) { return left.interpret(vars) + right.interpret(vars); }
}
// 客戶端
Map vars = Map.of("a", 10, "b", 20);
Expression expr = new AddExpression(new VariableExpression("a"), new VariableExpression("b"));
System.out.println("a + b = " + expr.interpret(vars)); // 30
| 優點 | 缺點 |
|---|---|
| 擴充性強:新增文法規則只需新增非終結符類 | 類別膨脹:每條文法規則一個類,複雜文法導致類爆炸 |
| 易於實作簡單文法 | 遞歸調用深,除錯困難,效能較低 |
| 符合開閉原則 | 不適用複雜、頻繁變動的文法 |
解釋器模式適合「文法簡單、穩定、需嵌入應用」的場景。複雜業務規則引擎建議採用成熟規則引擎或腳本語言,避免重造輪子並陷入維護泥潭。