解释器模式的定义
解释器模式(Interpreter Pattern)是一种按照规定语法进行解析的方案,在现在项目中使用较少。其定义如下:Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentence in the language. 即:给定一门语言,定义它的语法的一种表示,并定义一个解释器,该解释器用来解释语言中的句子。
解释器模式的通用类图如下:
解释器.png
- AbstractExpression 抽象解释器。具体的解释任务由实现类完成。具体的解释器分别由TerminalExpression和Non-terminalExpression完成。
- TerminalExpression 终结符表达式。实现与文法中的元素相关联的解释操作。
- Non-terminalExpression 非终结符表达式。语法中的每条规则对应于一个非终结符表达式。
- Context 环境角色。
其通用代码如下:
import java.util.ArrayList;
import java.util.List;
//抽象表达式
public abstract class Expression{
//解析任务
public abstract Object interpret(Context ctx);
}
//终结符表达式
public class TerminalExpression extends Expression{
//进行文法处理
@Override
public Object interpret(Context ctx) {
return null;
}
}
//非终结符表达式
public class NonTerminalExpression extends Expression{
public NonTerminalExpression(Expression...expressions){
}
//进行文法处理
@Override
public Object interpret(Context ctx) {
return null;
}
}
//
public class Context{
}
//客户端
public class InterpreterClient{
public static void main(String[] args) {
Context ctx = new Context();
List<Expression> list = new ArrayList<Expression>();
list.forEach(e->{
//进行语法判断
e.interpret(ctx);
});
}
}
解释器模式的应用
解释器模式的优点
解释器是一个简单的语法分析工具,最显著的特点就是扩展性。修改和扩展语法只需要修改或扩展相应的非终结表达式即可。
解释器模式的缺点
- 类膨胀。非终结表达式可能很多,导致不便维护。
- 解释器模式采用递归调用方法。
- 效率问题。
解释器模式的使用场景
- 重复发生的问题。
- 一个简单语法需要解释的场景。
《注》以上内容总结自秦小波-《设计模式之禅》,仅为个人学习笔记
网友评论