关闭

解释器模式(Interpreter)Java

2050人阅读 评论(0) 收藏 举报


定义:

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





3
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:203623次
    • 积分:3424
    • 等级:
    • 排名:第10153名
    • 原创:146篇
    • 转载:16篇
    • 译文:1篇
    • 评论:22条
    最新评论