解释器模式——《Android源码设计模式解析与实践》读书笔记10

定义

给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。


使用场景

(1)某个简单的语言需要解释执行而且可以将该语言中的语句表示为一个抽象语法树时

(2)在某些特定的领域出现不断重复的问题时,可以将该领域的问题转化为一种语法规则下的语句,然后构建解释器来解释该语句。


UML类图


解释器模式,多角色

实现方式

符号表达式抽象类

public abstract class AbstractExpression{

    public abstract int interpret(Context ctx);

}

终端符号表达式类

public class TerminalExpression extends AbstractExpression{

    @Override

    public int interpret(Context ctx){

        return ctx.a;

    };

}

非终端符号表达式类

public class NonterminalExpression extends AbstractExpression{

    @Override

    public intinterpret(Context ctx){

        //do sth, e.g.Addition

        return ctx.a + ctx.b;

    };

}

上下文环境类

public class Context{

    public int a,b;

}

处理类

public class Client{

    public static void main(String [] args){

        //...

    }

}


解释器模式的优缺点

优点

>具有灵活的扩展性,当想对文法规则进行扩展延伸时,只需要增加相应的非终结符解释器,并在构建抽象语法树时,使用新增的解释器对象进行具体的解释即可

缺点

>会生成大量的解释器类,导致后期维护困难

>对于国语复杂的文法,构建抽象语法树会显得很繁琐。


Android中的解释器模型举例

Android系统源码中基本没有经典的解释器模式实现,但是PackageParser等类应用了解释器模式的原理进行实现。


——2017.08.29

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 读取配置文件## 考虑这样一个实际的应用,维护系统自定义的配置文件。 几乎每个实际的应用系...
    七寸知架构阅读 3,184评论 2 56
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,259评论 19 139
  • 面向对象的六大原则 单一职责原则 所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于...
    JxMY阅读 979评论 1 3
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,839评论 18 399
  • 一直以来,我都在思考一个问题:上大学究竟是为了学什么? 这个问题困惑了我很久。 如今,随着内容创业时代的到来,各种...
    习习呀阅读 529评论 6 17