Interpreter模式,即解释器模式。
解释器模式属于行为模式,Gof是这样定义的:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解
释语言中的句子。
解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子]
。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。
解释器模式属于行为模式,Gof是这样定义的:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解
释语言中的句子。
解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子]
。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。
实例应用:正则表达式
举例说明:
- package design.interpreter;
- /**
- * 文件名称:Context.java
- * 创建人:Fei Wong
- * 创建时间: Jun 25, 2012
- * 电子邮箱:feiwong8@126.com
- * 解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等
- * */
- public class Context {
- private String in ;
- private int out ;
- public Context(String in) {
- this.in = in ;
- }
- public int getOut() {
- return out;
- }
- public void setOut(int out) {
- this.in = String.valueOf( out ) ;
- this.out = out;
- }
- public String getIn() {
- return in;
- }
- }
- package design.interpreter;
- /**
- * 文件名称:AbstractExpression.java
- * 创建人:Fei Wong
- * 创建时间: Jun 25, 2012
- * 电子邮箱:feiwong8@126.com
- * 解释器抽象类。
- * */
- public abstract class AbstractExpression {
- public abstract void interpret(Context context);
- }
- package design.interpreter;
- /**
- * 文件名称:MinusExpression.java 创建人:Fei Wong 创建时间: Jun 25, 2012
- * 电子邮箱:feiwong8@126.com
- * 解释器具体实现类。
- */
- public class MinusExpression extends AbstractExpression {
- @Override
- public void interpret(Context context) {
- String in = context.getIn();
- int v = Integer.parseInt(in);
- context.setOut(--v);
- }
- }
- package design.interpreter;
- /**
- * 文件名称:PlusExpression.java
- * 创建人:Fei Wong
- * 创建时间: Jun 25, 2012
- * 电子邮箱:feiwong8@126.com
- * 解释器具体实现类。
- * */
- public class PlusExpression extends AbstractExpression {
- @Override
- public void interpret(Context context) {
- String in = context.getIn() ;
- int v = Integer.parseInt( in ) ;
- context.setOut( ++v ) ;
- }
- }
- package design.interpreter;
- /**
- * 文件名称:Client.java
- * 创建人:Fei Wong
- * 创建时间: Jun 25, 2012
- * 电子邮箱:feiwong8@126.com
- * */
- public class Client {
- /**
- * @param args
- */
- public static void main(String[] args) {
- Context context = new Context( "10" ) ;
- new MinusExpression().interpret(context) ;
- new PlusExpression().interpret(context) ;
- new MinusExpression().interpret(context) ;
- new PlusExpression().interpret(context) ;
- System.out.println( context.getOut() );
- }
- }