解释器模式(Interpreter)Java
2016-05-31
package ding.study.designpatterns.interpreter; /** * 解释器模式抽象类 * - 声明一个抽象的Interpret方法,抽象语法树中所有的节点都必须实现该抽象方法。 * @author daniel * */ abstract class AbstractExpression { //解释方法 public abstract void interpret(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; } }
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("非终端解释器"); } }
package ding.study.designpatterns.interpreter; /** * 终端解释器 * - 实现和语法中末端符号相关的Interpret方法。 - 在每个句子的末端符号中均需要一个TerminalExpression实例。 * @author daniel * */ public class TerminalExpression extends AbstractExpression { @Override public void interpret(Context context) { System.out.println("终端解释器"); } }
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