Appearance
解释器模式
意图
给定一种语言,定义它的文法表示,并定义一个解释器,用该表示来解释语言中的句子。适合简单、变化少的规则表达式。
类图(简化)
Java 示例(极简布尔表达式)
java
import java.util.*;
public class Context {
private final Map<String, Boolean> vars = new HashMap<>();
public void set(String name, boolean v) { vars.put(name, v); }
public boolean get(String name) { return vars.getOrDefault(name, false); }
}
public interface Expr {
boolean interpret(Context ctx);
}
public class VarExpr implements Expr {
private final String name;
public VarExpr(String name) { this.name = name; }
public boolean interpret(Context ctx) { return ctx.get(name); }
}
public class AndExpr implements Expr {
private final Expr left, right;
public AndExpr(Expr l, Expr r) { this.left = l; this.right = r; }
public boolean interpret(Context ctx) {
return left.interpret(ctx) && right.interpret(ctx);
}
}
// Context ctx = new Context(); ctx.set("a", true); ctx.set("b", false);
// new AndExpr(new VarExpr("a"), new VarExpr("b")).interpret(ctx);复杂规则更常用 解析器生成器(ANTLR)或脚本引擎,解释器模式在业务 DSL 中适度使用即可。
下一节:迭代器模式