php 23種設計模式 - 直譯器模式
阿新 • • 發佈:2020-09-17
給定一個語言, 定義它的文法的一種表示,並定義一個直譯器,該直譯器使用該表示來解釋語言中的句子。
角色:
環境角色(PlayContent):定義解釋規則的全域性資訊。
抽象直譯器(Empress):定義了部分解釋具體實現,封裝了一些由具體直譯器實現的介面。
具體直譯器(MusicNote):實現抽象直譯器的介面,進行具體的解釋執行。
應用例項:編譯器、運算表示式計算。
優點:1、可擴充套件性比較好,靈活。 2、增加了新的解釋表示式的方式。 3、易於實現簡單文法。
缺點:1、可利用場景比較少。 2、對於複雜的文法比較難維護。 3、直譯器模式會引起類膨脹。 4、直譯器模式採用遞迴呼叫方法。
使用場景:
class Expression { //抽象表示 function interpreter($str) { return $str; } } class ExpressionNum extends Expression { //表示數字 function interpreter($str) { switch($str) { case "0": return "零"; case "1": return "一"; case "2": return "二"; case "3": return "三"; case "4": return "四"; case "5": return "五"; case "6": return "六"; case "7": return "七"; case "8": return "八"; case "9": return "九"; } } } class ExpressionCharater extends Expression { //表示字元 function interpreter($str) { return strtoupper($str); } } class Interpreter { //直譯器 function execute($string) { $expression = null; for($i = 0;$i<strlen($string);$i++) { $temp = $string[$i]; switch(true) { case is_numeric($temp): $expression = new ExpressionNum(); break; default: $expression = new ExpressionCharater(); } echo $expression->interpreter($temp); echo "<br>"; } } } //client $obj = new Interpreter(); $obj->execute("123s45abc"); /* 輸出: 一 二 三 S 四 五 A B C */