目錄通過直譯器模式來實現四則運算,如計算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 不要打 給我們,我們會打 給你 這是著名的 好萊塢 原則。在好萊塢,把簡歷遞交給演藝公司後就只有回家等待。由演藝公司對整個娛樂項的完全控制,演員...