读书人

解释器方式(Interpreter)

发布时间: 2013-10-28 11:21:45 作者: rapoo

解释器模式(Interpreter)
@@@模式定义:
给定一个语言,定义它的文法的一种表示,并定义一个解释器,
这个解释器使用该表示来解释语言中的句子。

@@@练习示例:
输入一个模型公式,然后输入模型中的参数,运算出结果。

@@@示例代码:
/pattern/Expression.java

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package user;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.HashMap;import pattern.Calculator;public class Client {    // 进行四则运算public static void main(String[] args)  throws IOException {String expStr = getExpStr(); // 赋值    HashMap<String, Integer> var = getValue(expStr); Calculator cal = new Calculator(expStr);   System.out.println("运算结果为:" + expStr + "=" + cal.run(var)); }// 获得表达式public static String getExpStr() throws IOException{     System.out.print("请输入表达式:");     return (new BufferedReader(new InputStreamReader(System.in))).readLine(); }// 获得值映射public static HashMap<String,Integer> getValue(String exprStr) throws IOException{     HashMap<String, Integer> map = new HashMap<String, Integer>();     // 解析有几个参数要传递    for(char ch : exprStr.toCharArray()){         if(ch != '+' && ch != '-'){             if(!map.containsKey(String.valueOf(ch))){ // 解决重复参数的问题                System.out.print("请输入" + ch + "的值:");                 String in = (new BufferedReader(new InputStreamReader(System.in))).readLine();                 map.put(String.valueOf(ch), Integer.valueOf(in));             }         }     }     return map;}}

@@@模式的实现:
继承抽象解释器的有终结表达式和非终结表达式。

@@@模式的优点:
1) 易于实现语法;
2) 易于扩展新的语法;

@@@模式的缺点:
不适合复杂的语法;

@@@模式的本质:
分离实现,解释执行

@@@模式体现的设计原则:
迪米特原则


读书人网 >软件架构设计

热点推荐