解釋器模式

解釋器模式(interpreter) ,給定一個(gè)語言,定義它的文法的一種表示,并定義一個(gè)解釋器,這個(gè)解釋器使用該表示來解釋語言中的句子。

解釋器模式的結(jié)構(gòu)圖

解釋器模式中的角色:

  • Context:包含解釋器之外的一些全局信息
  • AbstractExpression:抽象表達(dá)式,聲明一個(gè)抽象的解釋操作,這個(gè)接口為抽象語法樹中所有的結(jié)點(diǎn)所共享。
  • TerminalExpression:終結(jié)符表達(dá)式,實(shí)現(xiàn)與文法中的終結(jié)符相關(guān)聯(lián)的解釋操作。
  • NonterminalExpression:非終結(jié)符表達(dá)式,為文法中的非終結(jié)符號(hào),為文法中的非終結(jié)符實(shí)現(xiàn)解釋操作。對(duì)文法中每一條規(guī)則 R1、R2...Rm 都需要一個(gè)具體的非終結(jié)符表達(dá)式類。

解釋器模式的簡(jiǎn)單實(shí)現(xiàn)

(1)Context 類

public class Client {

    public static void main(String[] args) {
        Context context = new Context();
        List<AbstractExpression> abstractExpressionList = new ArrayList<>();
        abstractExpressionList.add(new TerminalExpression());
        abstractExpressionList.add(new NonterminalExpression());
        abstractExpressionList.add(new TerminalExpression());
        abstractExpressionList.add(new TerminalExpression());

        for (AbstractExpression abstractExpression : abstractExpressionList) {
            abstractExpression.interpret(context);
        }
    }
}

(2)抽象表達(dá)式

public abstract class AbstractExpression {

    public abstract void interpret(Context context);
}

(3)終結(jié)符表達(dá)式

public class TerminalExpression extends AbstractExpression {

    @Override
    public void interpret(Context context) {
        System.out.println("終端解釋器");
    }
}

(4)非終結(jié)符表達(dá)式

public class NonterminalExpression extends AbstractExpression {

    @Override
    public void interpret(Context context) {
        System.out.println("非終端解釋器");
    }
}

解釋器模式的應(yīng)用場(chǎng)景

應(yīng)用場(chǎng)景:
當(dāng)語言的文法較為簡(jiǎn)單,且執(zhí)行效率不是關(guān)鍵問題時(shí)。
當(dāng)問題重復(fù)出現(xiàn),且可以用一種簡(jiǎn)單的語言來進(jìn)行表達(dá)時(shí)。
當(dāng)一個(gè)語言需要解釋執(zhí)行,并且語言中的句子可以表示為一個(gè)抽象語法樹的時(shí)候,如 XML 文檔解釋。

解釋器模式的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):
可擴(kuò)展性比較好,靈活。
增加了新的解釋表達(dá)式的方式。
易于實(shí)現(xiàn)文法。

缺點(diǎn):
執(zhí)行效率比較低,可利用場(chǎng)景比較少。
對(duì)于復(fù)雜的文法比較難維護(hù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容