- N +

tough,思维导图-ope体育官网_ope体育·手机版滚球

原标题:tough,思维导图-ope体育官网_ope体育·手机版滚球

导读:

本文源码:GitHub || GitEE一、解释器模式1、基础概念解释器模式是对象的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户...

文章目录 [+]

本文源码GitHub || GitEE

一、解说器形式

1、根底概念

解说器形式是目标的行为形式。给定一个言语之后,解说器形式能够定义出其文法的一种表明,并一起供给一个解说器。客户端能够运用这个解说器来解说这个言语中的表达式。

2、形式图解

3、中心人物

(1)、笼统表达式

Express:声明详细表达式人物需求完成的笼统接口,该接口首要供给一个interpret()办法,称孕夫种田记做解说tough,思想导图-ope体育官网_ope体育·手机版滚球操作。

(2)、完结符表达式

TerminalExpress:完成笼统表达式人物接口,首要是一个interpret()办法;每个完结符都有一个详细完结表达式与之相对应。比方解析c=a+b,a和b是完结符,解析a和b的解说器便是完结符表达式。

(3)、非完结符表达式

NotTerminalExpress:每一条规矩都需求一个详细的非完结符表达式用来联接,一般是指运算符或许逻辑判别,比方c=a+b,“+"便对错完结符,解析“+”的解说器便是一个非完结符表达式。

(4)、环境容器

DataMap:一般是用来寄存各个完结符所对应的详细值,比方c=a+b转换为c=1+2。这些信息需求一个寄存环境。

4、源代码完成

  • 类图结构

  • 源码完成
public class C01_InScene {
public static void main(String[] argsilibilib) {
DataMap dataMap = new DataMap();
TerminalExpress terminalExpress1 = new TerminalExpress("num1");
TerminalExpress terminalExpress2 = new TerminalExpress("num2");
TerminalExpress termi邹旺廷nalExpress3 = new TerminalExpress("num3");
dataMap.putData(terminalExpress1, 1);
dataMap.putData(terminalExpress2, 2);
dataMap.putData(terminalExpress3, 3);
// 1+2-3 = 0
System泰安杨荣和最新任职.out.println(new Minus(
new Add(terminalExpress1,terminalExpress2), terminalExpress3)
.interpret(dataMap));
}
}
// 解说器接口
interface Express {
Integer interp超弦巫师ret(DataMap dataMap) ;
}
// 非完结符表达式
abstract class NotTerminalExpress implements Express {
Express express1,express2;
public NotTerminalExpress(Express express1, Express express2){
this.express1 = express1;
this.express2 = 陈纳express2;
}
}
// 完结符表达式: 1+2 完结符: 1 和 2
class TerminalExpress implements Express {
public String field ;
public TerminalExpress (String field){
this.field = field ;
}
@Override
public Integer interpret(DataMap dataMap) {
return dataMap.getData(this);
}
}
// 加法表达式
class Add extends NotTerminalExpress {
public Add (Express e1, Express e2) {
super(e1, e2);
}
// 将两个表达式相减
@Override
public Integer interpret(DataMap context) {
r冲砂暂堵剂eturn this.express1.interpret(context) + this.express2.interpret(context);
}
}
// 减法表达式
class Minus extends NotTerminalExpress {
public Minus (Express e1, Express e2) {
super(e1, e2);
}
// 将两个表达式相减
@Override
public Integer interpret(DataMap co丁鑫的游戏配备ntext) {
return this.express1.intertough,思想导图-ope体育官网_ope体育·手机版滚球pret(cpiansoontext) - this.express2.interpret(context);
}
}
// 数据容器
class DataMap {
private Map dataMap = new HashMap<>() ;
public void putData (Express key,Integer value){
dataMap.put(key,value) ;
}
public Integer getData (Express key){
rettough,思想导图-ope体育官网_ope体育·手机版滚球urtough,思想导图-ope体育官网_ope体育·手机版滚球n dataMap.get(key) ;
}
}

二、Spring结构运用

1、源码事例

import org.springframework.expression.Expression;
import org.springframe王佑仁work.expression.spel.standard.SpelExpressionParser;
public class SpringTest {
public static void main(String[]桜都字幕组 args) {
SpelExpressionParser parser = new SpelE怎样戒撸xpressionParser () ;
埃尔博Expression expression = parser.parseExpression("(1+3-2)*3") ;
Integer result = (Integer)expression.getValue() ;
System.out.println("result="+result);
}
}

2、代码剖析

(1)Expression结构

表达式接口:具有不同的完成类。

interface Expression
class CompositeStringExpression implements Expression
class LiteralExpression implements Expr原杏璃ession
class SpelExpression implements Expression

中心办法:

Object getValue() throws EvaluationException;

(2)SpelExpressionParser结构

SpelExpressionParser extends TemplateAwareExpressionParser
TemplateAwareExpressionParser impl蒋圳ements ExpressionParser
interface ExpressionParser

(3)ExpressionParser接口

public interface ExpressionParser {
Expre才让曲尼ssio方尧平n parseExpression(Strin泄身g var1) ;
Expression parseExpression(String var1, ParserContext var2) ;
}

(4)Expression获取

依据不同的条件获取不同的Expression目标。这儿发生类的依靠联系。

源码方位:TemplateAwareExpressionParser

public Expression parseExpression(String expressionString, 
ParserContext context) tough,思想导图-ope体育官网_ope体育·手机版滚球
throws ParseException {
if (context == null) {
context = NON_TEMPLATE_PARSER_CONTEXT;
}
return context.isTemplate() ?
this.parseTemplate(expressionString, context) :
this.doParseExpresstough,思想导图-ope体育官网_ope体育·手机版滚球ion(expressionString, context);
}

三、形式总结

  • 场景

编译器、运算符表达式、正则表达式、机器人等。

  • 长处

当有优格姐姐一个表达式或许言语需求解说履行,该场景下的内容能够考虑运用解说器形式,使程序具有杰出的扩展性。

  • 缺陷

解tough,思想导图-ope体育官网_ope体育·手机版滚球释器形式会引起类胀大,会导致程序履行和调试非常复杂,不容易了解。

引荐相关阅览:

Java描绘规划形式:观察者形式

Java描绘规划形式:工厂办法形式

Java描绘规划形式:装修形式

Java描绘规划形式:原型形式

Java描绘规划形式:组合形式

有好的文章希望我们帮助分享和推广,猛戳这里我要投稿

返回列表
上一篇:
下一篇:

  荣威推出第二代智能插电混动技能

  记者注意到,本次高峰论坛产学研专家齐心协力,探寻插电混动hcg,贾静雯-ope体育官网_ope体育·手机版滚球

  • insect,奔跑吧兄弟第三季-ope体育官网_ope体育·手机版滚球insect,奔跑吧兄弟第三季-ope体育官网_ope体育·手机版滚球