Skip to content

解释器模式

意图

给定一种语言,定义它的文法表示,并定义一个解释器,用该表示来解释语言中的句子。适合简单、变化少的规则表达式。

类图(简化)

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 中适度使用即可。

下一节:迭代器模式