解析器模式(Interpreter Pattern)
定义语言的文法,并且建立一个解释器来解释该语言中的句子。
?
为某种语言定义一个文法,并用该文法解释语言中的语句,当一个程序要处理许多不同,但又有些类似的问题时,用一种简单的语言描述这些问题,然后让程序解释该语言。
?
在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。
?
Interpreter模式比较适合简单的文法表示,对于复杂的文法表示,Interpreter模式会产生比较大的类层次结构,需要求助于语法分析生成器这样的标准工具。
?
抽象表达式类:
public abstract class AbstractExpression {public abstract void interpret(Context ctx);}
?
终结符表达式类:
public class TerminalExpression extends AbstractExpression{public void interpret(Context ctx) {System.out.println("TerminalExpression interpret");}}
?
非终结符表达式类:
public class NonterminalExpression extends AbstractExpression {private AbstractExpression successor;public AbstractExpression getSuccessor() {return successor;}public void setSuccessor(AbstractExpression successor) {this.successor = successor;}public void interpret(Context ctx) {System.out.println("NonterminalExpression interpret start");if(successor!=null){successor.interpret(ctx);}System.out.println("NonterminalExpression interpret end");}}
?
测试类:
public class Client {public static void main(String[] args) {Context ctx = new Context();NonterminalExpression e1 = new NonterminalExpression();AbstractExpression e2 = new TerminalExpression();e1.setSuccessor(e2);e1.interpret(ctx);}}
?