設計模式從入門到放棄 十九 直譯器模式

2021-10-06 03:47:16 字數 2097 閱讀 5385

直譯器模式 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...