解释器模式1.定义和类型定义:给定一种语言,定义其语法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子语言创建的解释器的类型:Behavioral2.出现频率适用场景中特定类型的问题足够高3.优点语法由很多类表示,易于更改和扩展语言4.缺点当语法规则数量过多时,增加了系统的复杂性5.相关设计模式解释器模式和适配器模式6.编码创建解释器顶层接口publicinterfaceInterpreter{intinterpreter();}解释器相关实现类publicclassAddInterpreterimplementsInterpreter{privateInterpreterfirstExpression,secondExpression;publicAddInterpreter(InterpreterfirstExpression,InterpretersecondExpression){this.firstExpression=firstExpression;this.secondExpression=secondExpression;}@Overridepublicintinterpreter(){returnthis.firstExpression.interpreter()+this.secondExpression.interpreter();}@OverridepublicStringtoString(){返回“+”;}}publicclassMultiInterpreterimplementsInterpreter{privateInterpreterfirstExpression,secondExpression;publicMultiInterpreter(InterpreterfirstExpression,InterpretersecondExpression){this.firstExpression=firstExpression;this.secondExpression=secondExpression;}@Overridepublicintinterpreter(){returnthis.firstExpression.interpreter()*this.secondExpression.interpreter();}@OverridepublicStringtoString(){返回“*”;}}创建数字解析器,用于处理入口publicclassNumberInterpreterimplementsInterpreter{privateintnumber;publicNumberInterpreter(intnumber){this.number=number;}publicNumberInterpreter(Stringnumber){this.number=Integer.parseInt(number);}@Overridepublicintinterpreter(){returnthis.number;}}简单实现了一个工具类publicclassOperatorUtil{publicstaticbooleanisOperator(Stringsymbol){return(symbol.equals("+")||symbol.equals("*"));}publicstaticInterpretergetExpressionObjects(InterpreterfirstInterpreter,InterpretersecondInterpreter,Stringsymbol){if("+".equals(symbol)){returnnewAddInterpreter(firstInterpreter,secondInterpreter);}elseif("*".equals(symbol)){returnnewMultiInterpreter(firstInterpreter,secondInterpreter);}返回空值;}}自定义一个解释器语言法publicclassQchExpressionParser{privateStack
