美文网首页
设计模式之解释器模式

设计模式之解释器模式

作者: 老羊_肖恩 | 来源:发表于2017-06-14 13:41 被阅读58次

解释器模式的定义

解释器模式(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);
        });
    }
}

解释器模式的应用

解释器模式的优点

解释器是一个简单的语法分析工具,最显著的特点就是扩展性。修改和扩展语法只需要修改或扩展相应的非终结表达式即可。

解释器模式的缺点

  • 类膨胀。非终结表达式可能很多,导致不便维护。
  • 解释器模式采用递归调用方法。
  • 效率问题。

解释器模式的使用场景

  • 重复发生的问题。
  • 一个简单语法需要解释的场景。

《注》以上内容总结自秦小波-《设计模式之禅》,仅为个人学习笔记

相关文章

网友评论

      本文标题:设计模式之解释器模式

      本文链接:https://www.haomeiwen.com/subject/hhhafxtx.html