設計模式二十三--解釋器模式

定義

給定一門語言,定義它的文法的一種表示,并定義一種解釋器,該解釋器使用該表示來解釋語言中的句子。

解釋器模式的角色

1:抽象表達式角色(AbstractExpression)
該角色聲明一個所有的具體表達式都需要實現(xiàn)的抽象接口,該接口主要是宇哥解釋器操作interpret()方法。

public abstract class AbstractExpression{
  public abstract Object interpret(Context ctx);
}

2:終結符表達式(TerminalExpression)
該角色實現(xiàn)了抽象表達式中所要求的接口,文法中的每一個終結符都有具體終結表達式與之對應。

public class TerminalExpression extends AbstractExpression{
  @Override
  public Object interpret(Context ctx){
    return null;
  }
}

3:非終結表達式(NotterminalExpression)
該角色是一個具體角色,文法中的每一條規(guī)則都對應一個非終結符表達式類。

public class NotterminalExpression extends AbstractExpression{
  //每個非終結表達式都會對其他表達式產(chǎn)生依賴。
  public NotterminalExpression(AbstractExpression expression){
    //TO_DO
  }
  @Overrdie
  public Object interpret(Context ctx){
    return null;
  }
}

4:環(huán)境角色(Context)
該角色提供解釋器之外的一些全局信息。

public class Context{
  private HashMap map = new HashMap();
  //TO_DO
}

5:客戶端角色(Client)
該角色創(chuàng)建一個抽象語法樹,調用解釋操作。

public class Client{
  public static void main(String [] args){
    Context ctx = new Context();
    for(;;){
      //自旋,進行語法判斷,并產(chǎn)生遞歸調用
    }
  }
}

優(yōu)點

1:簡單的語法分析工具。
2:擴展性良好,修改語法規(guī)則只需要修改響應得費終結表達式即可。

缺點

1:解釋器模式會引起類膨脹。每個語法都要產(chǎn)生一個非終結表達式,語法比較復雜的時候可能會產(chǎn)生大量的類文件,不易于維護。
2:采用遞歸方法調用,不易調試,影響效率。

使用場景

重復發(fā)生的問題可以使用解釋器模式。

解釋器模式是一個非常少用的模式

參考資料:設計模式(java)

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

友情鏈接更多精彩內容