天天看點

Java設計模式解釋器模式

作者:IT網際網路知識分享

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),輸出結果表明解釋器能夠正确地解釋表達式。

繼續閱讀