解释器模式是一种行为模式。主要方法就是形成一个解释语法树,然后根据语法树中的语法规则执行每一个语法字句即可。
解释器模式类图:
[img]http://dl.iteye.com/upload/attachment/364678/71a278dd-fb56-3c94-93fd-3a7137b9ad9b.jpg[/img]
说明:这个类图只是demo的类图示例,真正的解释器还包括测试类中的语法树,然后根据不同的解释器去对context内容进行解释执行。
具体代码示例:
解释器接口:
加法器
减法器:
上下文环境:
测试类:
解释器模式类图:
[img]http://dl.iteye.com/upload/attachment/364678/71a278dd-fb56-3c94-93fd-3a7137b9ad9b.jpg[/img]
说明:这个类图只是demo的类图示例,真正的解释器还包括测试类中的语法树,然后根据不同的解释器去对context内容进行解释执行。
具体代码示例:
解释器接口:
package interpreterPattern;
public interface Interpreter {
void interpret(Context context);
}
加法器
package interpreterPattern;
public class IncrementInterpreter implements Interpreter{
@Override
public void interpret(Context context) {
int value = Integer.valueOf(context.getValue());
value+=50;
System.out.println("after Increment operation,value="+value);
context.setValue(String.valueOf(value));
}
}
减法器:
package interpreterPattern;
public class DecrementInterpreter implements Interpreter{
@Override
public void interpret(Context context) {
int value = Integer.valueOf(context.getValue());
value-=10;
System.out.println("after Decrement operation,value="+value);
context.setValue(String.valueOf(value));
}
}
上下文环境:
package interpreterPattern;
public class Context {
private String value;
public void setValue(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
测试类:
package interpreterPattern;
import java.util.ArrayList;
import java.util.List;
public class IntepreterTest {
public static void main(String[]args){
Context context = new Context();
context.setValue("12345");
List<Interpreter> list = new ArrayList<Interpreter>();
//形成语法树
for(int i =0;i<10;i++)
{
if(i%3==0)
list.add(new DecrementInterpreter());
else
list.add(new IncrementInterpreter());
}
//解释执行
for(Interpreter interpreter :list){
interpreter.interpret(context);
}
}
}