设计模式~解释器模式(Interpreter)-19

简介: 解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。目录(1)优点:(2)缺点:(3)使用场景:(4)注意事项:(5)应用实例:代码

目录

(1)优点:

(2)缺点:

(3)使用场景:

(4)注意事项:

(5)应用实例:

代码


解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。

俺有一个《泡MM真经》,上面有各种泡MM的攻略,比如说去吃西餐的步骤、去看电影的方法等等,跟MM约会时,只要做一个Interpreter,照着上面的脚本执行就可以了。

解释器模式:给定一个语言后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式将描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。

在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表文法的命令类的等级结构,也就是一系列的组合规则。每一个命令对象都有一个解释方法,代表对命令对象的解释。命令对象的等级结构中的对象的任何排列组合都是一个语言。

意图:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。

主要解决:对于一些固定文法构建一个解释句子的解释器。

何时使用:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。

如何解决:构建语法树,定义终结符与非终结符。

关键代码:构建环境类,包含解释器之外的一些全局信息,一般是HashMap。

(1)优点:

1、可扩展性比较好,灵活。

2、增加了新的解释表达式的方式。

3、易于实现简单文法。

(2)缺点:

1、可利用场景比较少。

2、对于复杂的文法比较难维护。

3、解释器模式会引起类膨胀。

4、解释器模式采用递归调用方法。

(3)使用场景:

1、可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。

2、一些重复出现的问题可以用一种简单的语言来进行表达。

3、一个简单语法需要解释的场景。

(4)注意事项:

可利用场景比较少,JAVA 中如果碰到可以用 expression4J 代替。

(5)应用实例:

编译器、运算表达式计算。

代码


publicinterfaceExpression {
publicbooleaninterpret(Stringcontext);
}
publicclassTerminalExpressionimplementsExpression {
privateStringdata;
publicTerminalExpression(Stringdata){
this.data=data;
    }
@Overridepublicbooleaninterpret(Stringcontext) {
if(context.contains(data)){
returntrue;
        }
returnfalse;
    }
}
publicclassOrExpressionimplementsExpression {
privateExpressionexpr1=null;
privateExpressionexpr2=null;
publicOrExpression(Expressionexpr1, Expressionexpr2) {
this.expr1=expr1;
this.expr2=expr2;
    }
@Overridepublicbooleaninterpret(Stringcontext) {
returnexpr1.interpret(context) ||expr2.interpret(context);
    }
}
publicclassAndExpressionimplementsExpression {
privateExpressionexpr1=null;
privateExpressionexpr2=null;
publicAndExpression(Expressionexpr1, Expressionexpr2) {
this.expr1=expr1;
this.expr2=expr2;
    }
@Overridepublicbooleaninterpret(Stringcontext) {
returnexpr1.interpret(context) &&expr2.interpret(context);
    }
}
publicclassInterpreterPatternDemo {
//规则:Robert 和 John 是男性publicstaticExpressiongetMaleExpression(){
Expressionrobert=newTerminalExpression("Robert");
Expressionjohn=newTerminalExpression("John");
returnnewOrExpression(robert, john);
    }
//规则:Julie 是一个已婚的女性publicstaticExpressiongetMarriedWomanExpression(){
Expressionjulie=newTerminalExpression("Julie");
Expressionmarried=newTerminalExpression("Married");
returnnewAndExpression(julie, married);
    }
publicstaticvoidmain(String[] args) {
ExpressionisMale=getMaleExpression();
ExpressionisMarriedWoman=getMarriedWomanExpression();
System.out.println("John is male? "+isMale.interpret("John"));
System.out.println("Julie is a married women? "+isMarriedWoman.interpret("Married Julie"));
    }
}
目录
相关文章
|
3天前
|
设计模式 SQL Java
【设计模式】抖音一面:你不知道解释器模式?
【设计模式】抖音一面:你不知道解释器模式?
8 1
|
3天前
|
设计模式 Go
[设计模式 Go实现] 行为型~解释器模式
[设计模式 Go实现] 行为型~解释器模式
|
3天前
|
设计模式 存储 SQL
【设计模式系列笔记】解释器模式
解释器模式(Interpreter Pattern)是一种行为型设计模式,它定义了一种语言的文法,并且建立一个解释器来解释该语言中的句子。在Java中,解释器模式通常用于实现编程语言解释器、正则表达式解释器等。
10 0
|
3天前
|
设计模式 存储 Java
小谈设计模式(28)—解释器模式
小谈设计模式(28)—解释器模式
|
3天前
|
设计模式 存储 Java
23种设计模式,解释器模式的概念优缺点以及JAVA代码举例
【4月更文挑战第7天】解释器模式是一种行为设计模式,它用于定义一个语言的语法表示,并提供一个解释器来处理这种语法。主要用于频繁需要解释执行一组固定语法规则的场景,例如编程语言解释器、规则引擎等。
24 3
|
3天前
|
设计模式
【设计模式】解释器模式
【设计模式】解释器模式
|
3天前
|
设计模式 监控 Java
聊聊Java设计模式-解释器模式
解释器模式(Interpreter Design Pattern)指给定一个“语言”,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。这里所指的“语言”是指使用规定格式和语法的代码。
44 4
聊聊Java设计模式-解释器模式
|
3天前
|
设计模式 Go 开发工具
Golang设计模式——18解释器模式
Golang设计模式——18解释器模式
23 0
Golang设计模式——18解释器模式
|
3天前
|
设计模式 存储 前端开发
【设计模式】之解释器模式
解释器模式是一种用于解释特定语言或规则的表达式的行为设计模式。在前端开发中,解释器模式可以用于处理复杂的逻辑或规则,并将其转化为可执行的代码。它具有灵活性和可扩展性的优点,但也存在复杂性和性能问题的缺点。通过合理地应用解释器模式,可以提高代码的可读性和可维护性,实现更灵活和可扩展的功能。
44 1
|
3天前
|
设计模式 存储 缓存
二十三种设计模式全面解析-探索解释器模式如何应对性能挑战
二十三种设计模式全面解析-探索解释器模式如何应对性能挑战