直譯器模式 interpreter pattern 屬於行為模式,根據給定的語言表示式,選擇定義的直譯器,使用不同的直譯器來解析表示式得到最終的結果。類似的設計模式在sql解析,正規表示式,計算器,編譯器,模板引擎等大量使用。
context 環境上下文 儲存除直譯器外的全域性資訊
abstractexpression 抽象表示式 宣告抽象解釋操作 為語法樹中所有節點所共享
terminalexpreesion 終結符表示式 文法中終結相關的解釋操作 類似計算中的 等於 =
nonterminalexpression 非終結符操作 文法中非終結相關操作 類似計算中 + - * /
client 客戶端呼叫 使用context 和abstractexpression的實現類
通過直譯器模式來實現四則運算, 如計算 a+b-c 的值
// abstractexpression 抽象表示式 這裡以返回整數加減為例
public
inte***ce
expression
// 變數值expression 相當於從map中獲取具體的乙個數值 供操作expression呼叫
public
class
varexpression
implements
expression
@override
public
intinterpreter
(hashmap
var)
}
// 中間expression 核心在於 定義了expression的解析結構 這裡加減法需要
// 加數和被加數 就定義成了left 和 right left相當於就加數 right為被加數
public
class
symbolexpression
implements
expression
@override
public
intinterpreter
(hashmap
var)
}
// 加減法具體的操作
public
class
addexpression
extends
symbolexpression
@override
public
intinterpreter
(hashmap
var)
}public
class
subexpression
extends
symbolexpression
@override
public
intinterpreter
(hashmap
var)
}
// 最核心的操作類
public
class
calculator
}// 最終被遞迴包裝了很多層的表示式
this
.expression = deque.
pop();
}public
intrun
(hashmap
var)
}
// 客戶端呼叫
public
class
expressiontest
// 相當於給a+b+c 分別給abc複製
private
static hashmap
getmap
(string exp)}}
scanner.
close()
;return params;
}}
設計模式從入門到精通 19 直譯器模式
目錄通過直譯器模式來實現四則運算,如計算a b c的值,具體要求 傳統方案解決四則運算問題分析 4 這樣的例子還有,比如編譯器 運算表示式計算 正規表示式 機械人等 原理類圖 直譯器模式的角色及職責 uml 類圖 核心 抽象表示式 抽象表示式類 public abstract class expre...
設計模式從入門到放棄 二十 狀態模式
狀態模式 state pattern 屬於行為模式,主要用來解決物件在多狀態切換時,需要對外輸出不同行為的問題。狀態和行為一一對應,狀態之間可以相互轉換。使用場景在於 中有大量對物件狀態相關的判斷的條件語句的時候較為適合。context 上下文物件 用於維護state的例項 維護當前的狀態 stat...
設計模式從入門到放棄 四 原型模式
實現cloneable介面 最簡單的原型實現 這裡不能直接用lombok data 因為 data重寫了hashcode方法導致clone出來的hashcode一樣 setter getter tostring public class prototypeclass implements clone...