PHP物件導向進階設計模式:解譯器模式使用執行個體

來源:互聯網
上載者:User
什麼是解譯器模式?

解譯器設計模式用於分析一個實體的關鍵元素,並且針對每個元素都提供自己的解釋或相應的動作。


解譯器模式問題與解決方案

解譯器設計模式是我們經常使用但未意識到的少數幾個常見設計模式之一。並未限制這種設計模式只用於類的建立。在建立大多數編程演算法的過程中,我們都會使用到解譯器設計模式的基本概念。

為了理解解譯器設計模式的工作原理,我們以宏語言的處理為例。為每個宏編寫的命令本身是更多命令的集合。簡化的宏語言使編程人員不必考慮其他系統命令的文法就能夠更容易的完成建立操作。在某些情況下,這也能提升安全性,此時編程人員不直接存取系統命令。相反,編程人員會在某種沙箱內編寫封裝器方法來執行系統命令。紅語言會被解釋和轉換為一組要執行的命令。

通過查看模板系統也可以認識解譯器設計模式。特定的預定義關鍵字或符號被定義為表示其他事物。模板處理器用於接受代碼,解釋每個關鍵字以引用特定的指令集,並執行這些代碼。

構建基於解譯器設計模式的系統允許第三方或使用者更靈活地表示和檢索系統提供的資料。我們並不通過預定義方法名或特定常量來表示檢索資料的類型,而是使用關鍵字檢索這些資料。


UML

該圖詳細說明了一個使用解譯器設計模式的類設計。

以下是對的解釋:

1.MyObject類處理需要被解釋的內容。它具有私人字串content,這個字串儲存需要處理的內容。

2.storeContent()方法接受一個名為content的參數,該方法對處理內容進行預解釋,隨後將結果儲存在MyObject對象內部。

3.隨後會調用applyInterpretation()方法。該方法會建立MyInterpreter類的一個執行個體。MyInterpreter具有一個名為interpretKeys()的公用方法,這個方法接受參數content.applyInterpretation()並擷取該參數的內部內容。MyInterpreter類對要處理的內容執行解釋,並且將結果返回MyObject。接下來,applyInterpretation()方法替換內部的內容變數。

4.最後,MyObject通過getContent()方法提供解釋後的內容。

使用執行個體

文法遞迴的代碼部分需要根據具體的情況來實現,因此在代碼中沒有體現。抽象運算式是產生文法集合的關鍵,每個非終結符運算式解釋一個最小的文法單元,然後通過遞迴的方式將這些文法單元組合成完整的文法,這就是解譯器模式。

class Context {}abstract class Expression {public abstract Object interpreter(Context ctx);}class TerminalExpression extends Expression {public Object interpreter(Context ctx){return null;}}class NonterminalExpression extends Expression {public NonterminalExpression(Expression...expressions){}public Object interpreter(Context ctx){return null;}}public class Client {public static void main(String[] args){String expression = "";char[] charArray = expression.toCharArray();Context ctx = new Context();Stack<Expression> stack = new Stack<Expression>();for(int i=0;i<charArray.length;i++){//進行文法判斷,遞迴調用}Expression exp = stack.pop();exp.interpreter(ctx);}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.