首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

解释器方式(Interpreter)

2013-10-28 
解释器模式(Interpreter)@@@模式定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器

解释器模式(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) 易于扩展新的语法;

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

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

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


热点排行