設計模式從入門到精通 19 直譯器模式

2022-09-18 07:03:18 字數 2738 閱讀 4665

目錄通過直譯器模式來實現四則運算,如計算a + b - c的值,具體要求

傳統方案解決四則運算問題分析

4)這樣的例子還有,比如編譯器、運算表示式計算、正規表示式、機械人等

原理類圖

直譯器模式的角色及職責

uml 類圖

核心**

抽象表示式

/**

* 抽象表示式類

*/public abstract class expression

** @param var

* @return

*/public abstract int interpret(mapvar);

}

抽象運算符號直譯器

/**

* 抽象運算符號直譯器

* 這裡每個運算符號,都只和自己左右兩個數字有關係,

* 但左右兩個數字有可能也是乙個解析的結果,無論何種型別,都是expression類的實現類

*/public class symbolexpression extends expression

/*** 因為symbolexpression 是讓其子類來實現,因此interpreter是乙個預設實現

** @param var

* @return

*/@override

public int interpret(mapvar)

}

加減直譯器

/**

* 加法直譯器

*/public class addexpression extends symbolexpression

/*** 處理相加

** @param var

* @return

*/@override

public int interpret(mapvar)

}/**

* 減法直譯器

*/public class subexpression extends symbolexpression

/*** 處理相減

** @param var

* @return

*/@override

public int interpret(mapvar)

}

運算器類

/**

* 運算器類

*/public class calculator

}// 當遍歷完整個`chararr`陣列後,`stack`就得到了最終的`expression`

this.expression = stack.pop();

}public int run(mapvar)

}

測試**

public static void main(string args) throws ioexception 

public static string getexpstr() throws ioexception

public static mapgetvalue(string expstr) throws ioexception

system.out.print("請輸入" + s + "的值:");

map.put(s, integer.valueof(getexpstr()));

}return map;

}

測試結果

//請輸入表示式:a+b

//請輸入a的值:10

//請輸入b的值:20

//運算結果:a+b=30

spring框架中spelexpressionparser就使用到直譯器模式

示例**

spelexpressionparser spelexpressionparser = new spelexpressionparser();

expression expression = spelexpressionparser.parseexpression("10*(2+1)*1+66");

int result = (integer) expression.getvalue();

system.out.println(result);

uml 類圖

角色及職責

設計模式從入門到精通 設計模式對比

目錄首先,看下各個模式的定義 通過一張 總結其區別 抽象工廠模式 建造者模式 模板方法模式 建立型模式 結構型模式 關注的是物件的建立 關注的是物件的建立 關注的是物件的方法結構 關注的是具體產品的建立 關注的是複雜物件的建造過程 關注的是演算法框架 產品之間一般無關係 建造過程有關係,這些建造過程...

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

直譯器模式 interpreter pattern 屬於行為模式,根據給定的語言表示式,選擇定義的直譯器,使用不同的直譯器來解析表示式得到最終的結果。類似的設計模式在sql解析,正規表示式,計算器,編譯器,模板引擎等大量使用。context 環境上下文 儲存除直譯器外的全域性資訊 abstracte...

設計模式從入門到精通 設計模式大雜燴

目錄2 設計模式補充 要使得系統功能專業而單一,降低物件與物件之間 各個功能模組之間的依賴和耦合 don t call us,we ll call you 不要打 給我們,我們會打 給你 這是著名的 好萊塢 原則。在好萊塢,把簡歷遞交給演藝公司後就只有回家等待。由演藝公司對整個娛樂項的完全控制,演員...