解释器模式(Interpreter)Java

原创 2016年05月31日 14:24:04


定义:

解释器模式(interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。



结构图:





AbstractExpression解释器模式抽象类

package ding.study.designpatterns.interpreter;
/**
 * 解释器模式抽象类
 * - 声明一个抽象的Interpret方法,抽象语法树中所有的节点都必须实现该抽象方法。
 * @author daniel
 *
 */
abstract class AbstractExpression {
//解释方法
 public abstract void interpret(Context context);
 
}


Context解释器之外的一些全局信息

package ding.study.designpatterns.interpreter;

/**
 * 解释器之外的一些全局信息
 * Interpreter方法所需要的信息的容器,该信息对Interpreter而言全局可见。充当几个AbstractExpresssion
 * 实例之间的通讯频道。
 * 
 * @author daniel
 * 
 */
public class Context {
	private String input;
	private String output;

	/**
	 * @return the output
	 */
	public String getOutput() {
		return output;
	}

	/**
	 * @param output
	 *            the output to set
	 */
	public void setOutput(String output) {
		this.output = output;
	}

	/**
	 * @return the input
	 */
	public String getInput() {
		return input;
	}

	/**
	 * @param input
	 *            the input to set
	 */
	public void setInput(String input) {
		this.input = input;
	}

}


NonterminalExpression非终端解释器

package ding.study.designpatterns.interpreter;

/**
 * 非终端解释器 另外一个实现了AbstractExpression
 * 接口的类,用来处理语法树中非末端节点的语法。它含有下一个AbstractExpression(s)的引用,调用它每个子节点的Interpret方法。
 * 
 * @author daniel
 * 
 */
public class NonterminalExpression extends AbstractExpression {

	@Override
	public void interpret(Context context) {
 		System.out.println("非终端解释器");
	}

}


TerminalExpression终端解释器

package ding.study.designpatterns.interpreter;
/**
 * 终端解释器
 * - 实现和语法中末端符号相关的Interpret方法。
- 在每个句子的末端符号中均需要一个TerminalExpression实例。
 * @author daniel
 *
 */
public class TerminalExpression extends AbstractExpression {

 @Override
 public void interpret(Context context) {
   System.out.println("终端解释器");
  
 }

}



Client  客户端 ZTestMain

package ding.study.designpatterns.interpreter;

import java.util.ArrayList;
import java.util.List;
/**
 * 解释器模式(interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
 * 
 * 输出:
 * 终端解释器
非终端解释器
终端解释器
终端解释器

 * 
 * @author daniel
 * @email 576699909@qq.com
 * @time 2016-5-31 下午2:16:37
 */
public class ZTestMain {

 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Context context = new Context();
		List<AbstractExpression> list = new ArrayList<AbstractExpression>();
		list.add(new TerminalExpression());
		list.add(new NonterminalExpression());
		list.add(new TerminalExpression());
		list.add(new TerminalExpression());
		for (AbstractExpression exp : list) {
			exp.interpret(context);
		}

	}

}



执行结果




源代码

https://github.com/dingsai88/StudyTest/tree/master/src/ding/study/designpatterns/interpreter





JAVA设计模式十五--Interpreter(解释器模式)

Interpreter模式,即解释器模式。   解释器模式属于行为模式,Gof是这样定义的:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解     释语言中的句子...
  • hfmbook
  • hfmbook
  • 2012年06月25日 08:49
  • 3896

设计模式(c++)笔记之二十三(Interpreter模式)

一、描述:       概念:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 最简单的例子是表达式运算。       I...
  • my183100521
  • my183100521
  • 2013年10月25日 14:34
  • 2099

设计模式(行为型)之解释器模式(Interpreter Pattern)

访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。访问者模式使得用户可以在不修改现有系...
  • yanbober
  • yanbober
  • 2015年05月06日 17:11
  • 3482

GOF 23 设计模式之 解释器模式(Interpreter)与访问者模式(Visitor)

解释器模式介绍 是一种不常用的设计模式 用于描述如何构成一个简单的语言解释器,主要用于使用面相对象语言开发的编译器和解释器设计 当我们需要开发一种新的语言时,可以考虑使用解释器模式 尽量不要使用解释器...
  • coderbean
  • coderbean
  • 2015年10月04日 14:23
  • 541

Java解释器模式(Interpreter)

一、概述       定义语言的文法,并且建立一个解释器来解释该语言中的句子。如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子,这样就可以构建一个解...
  • YJian2008
  • YJian2008
  • 2013年12月10日 16:51
  • 670

JAVA设计模式—解释器模式(Interpreter)

定义:给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。 类型:类行为型模式 类图:   解释器模式的结构 抽象解释器:...
  • FX_SKY
  • FX_SKY
  • 2013年01月07日 11:40
  • 1437

Java解释器模式(Interpreter模式)

Interpreter定义:定义语言的文法,并且建立一个解释器来解释该语言中的句子。 Interpreter似乎使用面不是很广,它描述了一个语言解释器是如何构成的,在实际应用中,我们可能很少去构...
  • softn
  • softn
  • 2016年05月30日 06:52
  • 121

Java设计模式之解释器模式

概述解释器模式是一种用得比较少的行为型模式.提供了一种解释语言的语法或表达式的方式. 通过定义一个表达式接口,解释一个特定的上下文.定义给定一个语言,解释器模式可以定义出其文法的一种表示,并定义一个...
  • wbwjx
  • wbwjx
  • 2016年09月07日 07:05
  • 1171

java/android 设计模式学习笔记(23)---解释器模式

这篇博客我们来介绍一下解释器模式(Interpreter Pattern),也是行为型设计模式之一,是一种用的比较少的设计模式,其提供了一种解释语言的语法或表达式的方式,该模式定义了一个表达式接口,通...
  • zhao_zepeng
  • zhao_zepeng
  • 2016年10月07日 17:40
  • 1167

解释器模式的一个应用

需求做产品的时候,有一个需求:对于一个字符串要在提交之前做校验,但是校验标准需要可配置。最合理的方案就是使用正则表达式+表达式组合。基础数据结构配置的数据结构如下package com.example...
  • pouloghost
  • pouloghost
  • 2015年11月04日 20:47
  • 1449
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解释器模式(Interpreter)Java
举报原因:
原因补充:

(最多只允许输入30个字)