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

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

java设计模式-解释器模式(Interpreter)

Interpreter模式,即解释器模式。 解释器模式属于行为模式,Gof是这样定义的:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 解释器模式...

Java开发中的23种设计模式之二十三:解释器模式(Interpreter)

23、解释器模式(Interpreter) 解释器模式是我们暂时的最后一讲,一般主要应用在OOP开发中的编译器的开发中,所以适用面比较窄。 Context类是一个上下文环境类,Plus和Minus分...

Java设计模式之从[计算器]分析解释器(Interpreter)模式

解释器模式是一种广泛运用于编译器的设计模式。它的意图是给定一个语言,定义它的文法的一种表示,并定义一个解释器来解释语言中的句子。   本篇的内容和“游戏”无关,是从编译原理的角度来对这个模式进行解释,...
  • Froser
  • Froser
  • 2014年04月15日 18:10
  • 1275

Java私塾:研磨设计模式 之 解释器模式(Interpreter)3

21.3  模式讲解 21.3.1  认识解释器模式 (1)解释器模式的功能        解释器模式使用解释器对象来表示和处理相应的语法规则,一般一个解释器处理一条语法规则。理论上...

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

解释器模式   给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子 适用性   当有一个语言需要解释执行,并且你可以将该语言中的句子表示为一个抽象语法...

JAVA设计模式(22):行为型-解释器模式(Interpreter)

虽然目前计算机编程语言有好几百种,但有时候我们还是希望能用一些简单的语言来实现一些特定的操作,我们只要向计算机输入一个句子或文件,它就能够按照预先定义的文法规则来对句子或文件进行解释,从而实现相应的功...

【Java设计模式】· 解释器模式(Interpreter Pattern)

1. 当我们解决问题时,需要重复多次使用某个方法,为了方便,我们就会专门为这个方法写一个类,这就是解释器模式。 2.解释器模式 和 享元模式的不同在哪儿? 两个模式共同点是解决"重复多次调用...
  • ReusLi
  • ReusLi
  • 2015年08月11日 10:14
  • 427
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解释器模式(Interpreter)Java
举报原因:
原因补充:

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