解释器模式
Posted yangxiaohui227
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解释器模式相关的知识,希望对你有一定的参考价值。
* 解释模式:用得极其少:此处用一个加法和乘法例子说明: * 模式特点:一个表达式接口(Expression)和多个实现类,表达式接口有个解释的方法interpret(); * 表达式接口的实现类分成2类: 非终结符表达式(NonterminalExpression),例如 加号就是非总结表达式,因为是一个过程 * 终结符表达式(TerminalExpression):就是能取到具体指的表达表达式,如 5这个数字就是终结表达式,因为它不是一个过程 * Context:上下文,用于存储终结表达式的值 * 本例模拟实现加法和乘法的过程 */ //抽象解释器(AbstractExpression) public interface Expression { int interpret(Context context); } //终结表达式,获取具体值 public class NumberExpression implements Expression{ private String name; public NumberExpression(String name) { this.name = name; } //通过名字在上下文获取具体的值 @Override public int interpret(Context context) { return context.interpret(name); } } //非终结符表达式(NonterminalExpression) 乘法 public class MultipyEpression implements Expression{ private Expression e1,e2; //e1,e2都是终结表达式 public MultipyEpression(Expression e1, Expression e2) { this.e1 = e1; this.e2 = e2; } @Override public int interpret(Context context) { //乘法运算 return this.e1.interpret(context)*this.e2.interpret(context); } } //非终结符表达式(NonterminalExpression) 加法 public class AddExpression implements Expression { private Expression e1,e2; //e1,e2都是终结表达式 public AddExpression(Expression e1, Expression e2) { this.e1 = e1; this.e2 = e2; } @Override public int interpret(Context context) { //加法运算 return this.e1.interpret(context)+this.e2.interpret(context); } } //上下文表达式 public class Context { private Map<String,Integer> map=new HashMap<>(); //存储终结表达式的值 public void addNum(String name,Integer num){ if(null==map.get(name)){ map.put(name,num); } } //获取终结表达式的值 public int interpret(String name){ return map.get(name); } } public class Test { public static void main(String[] args) { Context context = new Context();//上下文对象 Expression e1 = new NumberExpression("e1"); //终结表达式 Expression e2 = new NumberExpression("e2");//终结表达式 Expression e3 = new NumberExpression("e3");//终结表达式 context.addNum("e1",2);//给终结表达式 赋值 context.addNum("e2",6);//给终结表达式 赋值 context.addNum("e3",3);//给终结表达式 赋值 //计算(2+6)*3 MultipyEpression multipyEpression = new MultipyEpression(new AddExpression(e1, e2), e3); System.out.println(multipyEpression.interpret(context));//24 } }
以上是关于解释器模式的主要内容,如果未能解决你的问题,请参考以下文章