`
coolerbaosi
  • 浏览: 728441 次
文章分类
社区版块
存档分类
最新评论

解释器模式 Interpreter Pattern

 
阅读更多
一、什么是解释器模式
Interpreter模式也叫解释器模式,是行为模式之一,它是一种特殊的设计模式,它建立一个解释器,对于特定的计算机程序设计语言,用来解释预先定义的文法。简单地说,Interpreter模式是一种简单的语法解释器构架。

二、解释器模式应用场景
当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。
而当存在以下情况时该模式效果最好:
该文法简单对于复杂的文法,文法的类层次变得庞大而无法管理。此时语法分析程序生成器这样的工具是更好的选择。它们无需构建抽象语法树即可解释表达式,这样可以节省空间而且还可能节省时间。
效率不是一个关键问题,最高效的解释器通常不是通过直接解释语法分析树实现的,而是首先将它们转换成另一种形式。例如,正则表达式通常被转换成状态机。但即使在这种情况下,转换器仍可用解释器模式实现,该模式仍是有用的。

三、解释器模式的结构



四、解释器模式的角色和职责
Context

解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等。

AbstractExpression

解释器抽象类。

ConcreteExpression

解释器具体实现类。


Context.java
/* 
 * 上下文环境类,用来保存文法 
 */ 
public class Context { 
     
    private String input; 
    private int output; 
     
    public Context(String input) { 
        this.input = input; 
    } 
     
    public String getInput() { 
        return input; 
    } 
    public void setInput(String input) { 
        this.input = input; 
    } 
    public int getOutput() { 
        return output; 
    } 
    public void setOutput(int output) { 
        this.output = output; 
    } 
}
Expression.java
/* 
 * 抽象解释器 
 */ 
public abstract class Expression { 
     
    public abstract void interpret(Context context); 
     
}
MinusExpression.java
public class MinusExpression extends Expression { 
	 
    public void interpret(Context context) { 
        System.out.println("自动递减"); 
        String input = context.getInput(); 
        int inInput = Integer.parseInt(input); 
//      inInput--; 
        --inInput; 
        context.setInput(String.valueOf(inInput)); 
        context.setOutput(inInput); 
    } 
 
}
PlusExpression.java
public class PlusExpression extends Expression { 
	 
    public void interpret(Context context) { 
        //提示信息 
        System.out.println("自动递增"); 
        //获得上下文环境 
        String input = context.getInput(); 
        //进行类型转换 
        int intInput = Integer.parseInt(input); 
        //进行递增 
//      intInput++; 
        ++intInput; 
        //对上下文环境重新进行赋值 
        context.setInput(String.valueOf(intInput)); 
        context.setOutput(intInput); 
    } 
 
}
MainClass.java
import java.util.ArrayList; 
import java.util.List; 
 
/* 
 * client 
 */ 
public class MainClass { 
    public static void main(String[] args) { 
        String number = "20"; 
        Context context = new Context(number); 
         
//      Expression expression1 = new MinusExpression(); 
//      expression1.interpret(context); 
//      System.out.println(context.getOutput()); 
//       
//      Expression expression2 = new PlusExpression(); 
//      expression2.interpret(context); 
//      System.out.println(context.getOutput()); 
//       
//      Expression expression3 = new PlusExpression(); 
//      expression3.interpret(context); 
//      System.out.println(context.getOutput()); 
//       
//      Expression expression4 = new PlusExpression(); 
//      expression4.interpret(context); 
//      System.out.println(context.getOutput()); 
         
        List<Expression> list = new ArrayList<Expression>(); 
        list.add(new PlusExpression()); 
        list.add(new PlusExpression()); 
        list.add(new MinusExpression()); 
        list.add(new MinusExpression()); 
        list.add(new MinusExpression()); 
        list.add(new MinusExpression()); 
         
        for(Expression ex : list) { 
            ex.interpret(context); 
            System.out.println(context.getOutput()); 
        } 
    } 
}



分享到:
评论

相关推荐

    设计模式之解释器模式(Interpreter Pattern)

    给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。

    C#版 24种设计模式

    工厂方法模式(Factory Method Pattern) 观察者模式(Observer Pattern) 建造者模式(Builder Pattern) 解释器模式(Interpreter Pattern) 命令模式(Command Pattern) 模板方法模式(Template Method Pattern) 桥接模式...

    用Java实现23种设计模式

    解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式(State Pattern) 空对象模式...

    Python设计模式之解释器模式原理与用法实例分析

    解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 下面是一个解释器模式的demo: #!/usr/bin/env python # -*- coding:utf-8 -...

    C#设计模式_设计模式_C#_

    解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor ...

    C#设计模式(23种设计模式)

    解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者...

    33种JAVA设计模式DEMO

    解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式(State Pattern) 空对象模式(Null ...

    geekxh#hello-algorithm#解释器模式2

    介绍解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的

    设计模式PPT

     解释器模式(Interpreter Pattern)  迭代器模式(Iterator Pattern)  中介者模式(Mediator Pattern)  备忘录模式(Memento Pattern)  观察者模式(Observer Pattern)  状态模式(State Pattern)...

    设计模式代码——c#

    17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者...

    23种设计模式 (创建型,结构型,行为型)

    解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者...

    C++设计模式(Design Pattern)范例源代码

    解释器模式(Interpreter) 迭代器模式(Iterator) 中介者模式(Mediator) 备忘录模式(Memento) 观察者模式(Observer) 状态模式(State) 策略模式(Strategy) 模板方法模式(Template Method) 访问者模式(Visitor)

    32种设计模式

    解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) ...

    解释器模式

    解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。

    design-pattern-java.pdf

    请求发送者与接收者解耦——命令模式(六) 解释器模式-Interpreter Pattern 自定义语言的实现——解释器模式(一) 自定义语言的实现——解释器模式(二) 自定义语言的实现——解释器模式(三) 自定义语言的实现...

    Android编程设计模式之解释器模式详解

    解释器模式(Interpreter Pattern)是一种用的比较少的行为型模式,其提供了一种解释语言的语法或表达式的方式,该模式定义了一个表达式接口,通过该接口解释一个特定的上下文。在这么多的设计模式中,解释器模式在...

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏...pattern/src/behavior/interpreter //13.11解释器模式

    设计模式 design pattern

    5.3 INTERPRETER(解释器)—类行为型 模式 162 5.4 ITERATOR(迭代器)—对象行为型 模式 171 5.5 MEDIATOR(中介者)—对象行为型 模式 181 5.6 MEMENTO(备忘录)—对象行为型 模式 188 5.7 OBSERVER(观察者)—...

    24个设计模式与6大设计原则

    第 22 章 解释器模式【INTERPRETER PATTERN】 286 第 23 章 亨元模式【FLYWEIGHT PATTERN】 287 第 24 章 备忘录模式【MEMENTO PATTERN】 288 第 25 章 模式大PK 289 第 26 章 六大设计原则 290 ...

Global site tag (gtag.js) - Google Analytics