文档章节

【行为型】- 解释器模式

ZeroneLove
 ZeroneLove
发布于 02/20 09:33
字数 561
阅读 14
收藏 0

解释器模式


定义一种语言的文法表示和关联的解释器,解释器使用该文法表示来解释语言中的句子。

角色


  • AbstractExpression:定义解释器接口,约定解释器的操作

  • TerminalExpression:终结符解释器,用来实现语法规则中和终结符相关的操作,不再包含其他的解释器

  • NonterminalExpression:非终结符解释器,用来实现语法规则中非终结符相关的操作, 通常一个解释器对应一个语法规则,可包含其他解释器

  • Context:上下文,通常包含各个解释器需要的数据或是公共功能,一般用来传递被所有解释器共享的数据。

  • Client:客户端,指是使用解释器的客户端,通常在这里将按照语言的语法做的表达式转换成使用解释器对象描述的抽象语法树,然后调用解释操作。


抽象表达式: AbstractExpression

package com.zhiwei.pattern.behaviour.interpreter;

/**
 * 抽象表达式:定义解析器的公共方法
 *
 * [@author](https://my.oschina.net/arthor) Yang ZhiWei
 */
public interface AbstractExpression {
    void parse(Context context);
}

上下文:Context

public class Context {

    private String str;

    public Context(String str) {
        this.str = str;
    }

    public String getStr() {
        return this.str;
    }
}

解释器:

/**
 * "我"字符解析器
 * @author Yang ZhiWei
 *
 */
public class WoInterpreter implements AbstractExpression {
  
	public void parse(Context context) {
        if (context.getStr().indexOf("我") != -1) {
            System.out.print("I");
        }
    }
}
/**
 * "空白字符"字符解析器
 * @author Yang ZhiWei
 *
 */
public class FuhaoInterpreter implements AbstractExpression {
   
	public void parse(Context context) {
        if (context.getStr().indexOf(" ") != -1) {
            System.out.print(" ");
        }
    }
}
/**
 * "爱"字符解析器
 * @author Yang ZhiWei
 *
 */
public class AiInterpreter implements AbstractExpression {
	
    public void parse(Context context) {
        if (context.getStr().indexOf("爱") != -1) {
            System.out.print("Love");
        }
    }
}
/**
 * "你"字符解析器
 * @author Yang ZhiWei
 *
 */
public class NiInterpreter implements AbstractExpression {
    
	public void parse(Context context) {
        if (context.getStr().indexOf("你") != -1) {
            System.out.print("you");
        }
    }
}

测试代码:

 Context context = new Context("我 爱 你");
        
/**
* 字符解析器集合:按照顺序进行解析
*/
List<AbstractExpression> list = new ArrayList<AbstractExpression>();
list.add(new WoInterpreter());
list.add(new FuhaoInterpreter());
list.add(new AiInterpreter());
list.add(new FuhaoInterpreter());
list.add(new NiInterpreter());

//顺序解析目标对象
for (int i = 0; i < list.size(); i++) {
AbstractExpression interpreter = (AbstractExpression)list.get(i);
interpreter.parse(context);
}

© 著作权归作者所有

ZeroneLove
粉丝 5
博文 164
码字总数 133695
作品 0
深圳
高级程序员
私信 提问
设计原则和设计模式_Index

设计原则 1.1 什么是设计原则 ?(https://my.oschina.net/jimilee/blog/732569) 1.2 设计原则如何用? 1.3 设计原则详解 1.4 30分钟快速理解面向对象设计原则 2. 设计模式 2.1 什么时候使用设...

无寄语
2016/08/14
1
0
Java设计模式之-解释器模式(Interpreter)

解释器模式在我看来,应用范围很小,我想了很久,想举一个不是加减乘除运算的例子出来,但是很难......在设计模式一书中,它的意图也被定义为实现一种语言所要运用的模式,我在网上找了一篇比...

Mock2052
2017/12/12
0
0
Android 架构师之路12 设计模式之解释器模式

Android 架构师之路 目录 1、解释器模式概念 1.1 介绍 解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释...

香沙小熊
2018/01/29
0
0
解析器模式

1 场景问题 1.1 读取配置文件 考虑这样一个实际的应用,维护系统自定义的配置文件。 几乎每个实际的应用系统都有与应用自身相关的配置文件,这个配置文件是由开发人员根据需要自定义的,系统...

ciyo_yang
2017/07/15
0
0
23种设计模式(14):解释器模式

定义:给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。 类型:行为类模式 类图: 解释器模式是一个比较少用的模式,本人之前也没有用过这个...

LCZ777
2014/07/09
22
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
13
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
9
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
12
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部