程序员人生 网站导航

解释器模式(Interpreter)Java

栏目:综合技术时间:2016-06-24 08:52:06


定义:

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



结构图:





AbstractExpression解释器模式抽象类

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


Context解释器以外的1些全局信息

package ding.study.designpatterns.interpreter; /** * 解释器以外的1些全局信息 * 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; /** * 非终端解释器 另外1个实现了AbstractExpression * 接口的类,用来处理语法树中非末端节点的语法。它含有下1个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方法。 - 在每一个句子的末端符号中均需要1个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):给定1个语言,定义它的文法的1种表示,并定义1个解释器,这个解释器使用该表示来解释语言中的句子。 * * 输出: * 终端解释器 非终端解释器 终端解释器 终端解释器 * * @author daniel * @email 576699909@qq.com * @time 2016⑸⑶1 下午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





------分隔线----------------------------
------分隔线----------------------------

最新技术推荐