用途


解释器模式 (Interpreter)
定义一个语言,定义它的文法的一种表示。
并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
解释器模式是一种行为型模式
结构

aaarticlea/png;base64,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" alt="" />

图-解释器模式结构图

Context : 包含解释器之外的一些全局信息。

class Context {

    private String input;

    private String output;

    

    public void setInput(String input) {

        this.input = input;

    }

    

    public String getInput() {

        return this.input;

    }

    

    public void setOutput(String output) {

        this.output = output;

    }

    

    public String getOutput() {

        return this.output;

    }

}

AbstractExpression : 声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享。

abstract class AbstractExpression {

    public abstract void Interpret(Context context);

}

TerminalExpression : 实现与文法中的终结符相关联的解释操作。实现抽象表达式中所要求的接口,主要是一个 Interprete()方法。
文法中的每一个终结符都有一个具体终结表达式与之对应。

class TerminalExpression extends AbstractExpression {

    @Override

    public void Interpret(Context context) {

        context.setOutput("终端" + context.getInput());

        System.out.println(context.getInput() + "经过终端解释器解释为:" + context.getOutput());

    }

}

NonterminalExpression : 实现与文法中的非终结符相关联的解释操作。对文法中的每一条规则R1,R2......Rn都需要一个具体的非终结符表达式类。通过实现抽象表达式的 Interpret 方法实现解释操作。

class NonterminalExpression extends AbstractExpression {

    @Override

    public void Interpret(Context context) {

        context.setOutput("非终端" + context.getInput());

        System.out.println(context.getInput() + "经过非终端解释器解释为:" + context.getOutput());

    }

}

测试代码

public class InterpreterPattern {
    public static void main(String[] args) {
        Context context = new Context();
        context.setInput("ABC");
        
        AbstractExpression expression1 = new TerminalExpression();
        expression1.Interpret(context);
        
        AbstractExpression expression2 = new NonterminalExpression();
        expression2.Interpret(context);
    }
}

运行结果

ABC经过终端解释器解释为:终端ABC
ABC经过非终端解释器解释为:非终端ABC
推荐

本文属于 JAVA设计模式系列

参考资料

《大话设计模式》

《HeadFirst设计模式》

JAVA 设计模式 解释器模式的更多相关文章

  1. Java设计模式----解释器模式

    计算器中,我们输入“20 + 10 - 5”,计算器会得出结果25并返回给我们.可你有没有想过计算器是怎样完成四则运算的?或者说,计算器是怎样识别你输入的这串字符串信息,并加以解析,然后执行之,得出结 ...

  2. Java设计模式—解释器模式&迭代器模式简介

       解释器模式在实际的系统开发中使用得非常少,因为它会引起效率.性能以及维护等问题,一般在大中型的框架型项目能够找到它的身影,如一些数据分析工具.报表设计工具.科学计算工具等,若你确实遇到" ...

  3. Java设计模式-解释器模式(Interpreter)

    解释器模式是我们暂时的最后一讲,一般主要应用在OOP开发中的编译器的开发中,所以适用面比较窄. Context类是一个上下文环境类,Plus和Minus分别是用来计算的实现,代码如下: public ...

  4. Java设计模式——组合模式

    JAVA 设计模式 组合模式 用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模 ...

  5. java设计模式--单列模式

    java设计模式--单列模式 单列模式定义:确保一个类只有一个实例,并提供一个全局访问点. 下面是几种实现单列模式的Demo,每个Demo都有自己的优缺点: Demo1: /** * 单列模式需要满足 ...

  6. 3.java设计模式-建造者模式

    Java设计模式-建造者模式 在<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal repr ...

  7. Java设计模式-代理模式之动态代理(附源代码分析)

    Java设计模式-代理模式之动态代理(附源代码分析) 动态代理概念及类图 上一篇中介绍了静态代理,动态代理跟静态代理一个最大的差别就是:动态代理是在执行时刻动态的创建出代理类及其对象. 上篇中的静态代 ...

  8. Java设计模式——外观模式

    JAVA 设计模式 外观模式 用途 外观模式 (Facade) 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 外观模式是一种结构型模式. 结构

  9. 【设计模式】Java设计模式 -工厂模式

    [设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...

随机推荐

  1. 解剖SQLSERVER 第七篇 OrcaMDF 特性概述(译)

    解剖SQLSERVER 第七篇  OrcaMDF 特性概述(译) http://improve.dk/orcamdf-feature-recap/ 时间过得真快,这已经过了大概四个月了自从我最初介绍我 ...

  2. 关于公司内部的Nuget服务

    简介 公司内部搭建的Nuget服务,私有安全,局域网,速度快. 使用方法 VS -> 工具 -> 库程序包管理器 -> 程序包管理器设置 -> 程序包源 -> 新增以下配 ...

  3. C#/net 使用Protocol Buffers入门

    Protocol buffers 是一个由谷歌开发的开源的编码机制用于将结构化的数据序列化或者反序列化,被设计成语言以及平台中立,protobuff比xml更简单比json还要紧凑一些,网上有一些关于 ...

  4. [.NET领域驱动设计实战系列]专题一:前期准备之EF CodeFirst

    一.前言 从去年已经接触领域驱动设计(Domain-Driven Design)了,当时就想自己搭建一个DDD框架,所以当时看了很多DDD方面的书,例如领域驱动模式与实战,领域驱动设计:软件核心复杂性 ...

  5. 图解集合3:CopyOnWriteArrayList

    初识CopyOnWriteArrayList 第一次见到CopyOnWriteArrayList,是在研究JDBC的时候,每一个数据库的Driver都是维护在一个CopyOnWriteArrayLis ...

  6. Hdoop日记Day10---RPC机制

    一.RPC(Remote Procedure Call)简介 RPC 是远程过程调用(Remote Procedure Call),即远程调用其他虚拟机中运行的javaobject.RPC 是一种客户 ...

  7. 项目八:团队项目——Alpha阶段项目总结

    1.项目的预期目标 a.完成游戏的基本功能 b.游戏难度的玩家手动调节 c.游戏能够良好的运行完成 与前期的需求分析对比: 第一点不同是游戏的难度调节,原来是想通过选择难度来调节的,但由于难度的分层上 ...

  8. Nim教程【六】

    目前看来这是国内第一个关于Nim的系列教程 先说废话 Rust1.0已经发布了, 国内有一个人为这个事情写了一篇非常长的博客, 这篇文章我前几天草草的看了一下,只记得这位朋友追Rust的艰辛,其他内容 ...

  9. 微软承诺将在今年的 Visual C++ 更新中加入 Clang 编译器

    微软最近发布将在2015年11月 Visual C++ 更新中加入 Clang 编译器 ,Clang 开源编译器以相比GCC更快的编译速度和更优的错误提示著称. Clang关于C,C++,及Objec ...

  10. Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密

    前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项.目前企业号和公众号的加密方式是一致的(格式会有少许差别). 加密设置 进入公众号后台的“开发者中心”,我们可以看到U ...