- 浏览: 103266 次
- 性别:
- 来自: 深圳
文章分类
最新评论
Interpreter模式也叫解释器模式,是由GoF提出的23种设计模式中的一种。Interpreter是行为模式之一,它是一种特殊的设计模式,它建立一个解释器,对于特定的计算机程序设计语言,用来解释预先定义的文法。
本文介绍设计模式中的解释器(Interpreter)模式的概念,用法,以及实际应用中怎么样使用Interpreter模式进行开发。
Interpreter是一种特殊的设计模式,它建立一个解释器,对于特定的计算机程序设计语言,用来解释预先定义的文法。简单地说,Interpreter模式是一种简单的语法解释器构架。
Interpreter模式有很多种实现方法,下面我们给出Interpreter模式的一种类图来说明Interpreter模式:
在上图中,我们假设需要在Client中解释某文法,Client调用Context来存储文法规则,并调用解释器AbstractionExpression类树来对该文法加以解释。注意,上图只是Interpreter模式的一种实现方式的类图。
Context
解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等。
AbstractExpression
解释器抽象类。
ConcreteExpression
解释器具体实现类。
让一个表达式a经过PlusExpression解释器处理后使该表达式+1,经过MinusExpression解释器处理后使该表达式-1。
代码:
运行并显示Client:
Interpreter模式的概念
Interpreter是一种特殊的设计模式,它建立一个解释器,对于特定的计算机程序设计语言,用来解释预先定义的文法。简单地说,Interpreter模式是一种简单的语法解释器构架。
Interpreter模式有很多种实现方法,下面我们给出Interpreter模式的一种类图来说明Interpreter模式:
在上图中,我们假设需要在Client中解释某文法,Client调用Context来存储文法规则,并调用解释器AbstractionExpression类树来对该文法加以解释。注意,上图只是Interpreter模式的一种实现方式的类图。
Context
解释器上下文环境类。用来存储解释器的上下文环境,比如需要解释的文法等。
AbstractExpression
解释器抽象类。
ConcreteExpression
解释器具体实现类。
Interpreter模式的实现范例
为了帮助大家理解Interpreter模式的基本概念,我们在这里只举一个最简单的例子。让一个表达式a经过PlusExpression解释器处理后使该表达式+1,经过MinusExpression解释器处理后使该表达式-1。
代码:
import java.util.ArrayList;
import java.util.List;
public class Client {
public static void main(String []args) {
String inputExpr = "10";
Context context = new Context(inputExpr);
List list = new ArrayList();
list.add(new PlusExpression());
list.add(new PlusExpression());
list.add(new MinusExpression());
list.add(new MinusExpression());
list.add(new MinusExpression());
for (int i=0;i<list.size();i++) {
AbstractExpression expression = (AbstractExpression)list.get(i);
expression.interpret(context);
}
System.out.println(context.getOutput());
}
}
/**
* Context
*
*/
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 & subclass
*
*/
abstract class AbstractExpression {
public abstract void interpret(Context context);
}
class PlusExpression extends AbstractExpression {
public void interpret(Context context) {
System.out.println("PlusExpression ++");
String input = context.getInput();
int parsedResult = Integer.parseInt(input);
parsedResult ++;
context.setInput(String.valueOf(parsedResult));
context.setOutput(parsedResult);
}
}
class MinusExpression extends AbstractExpression {
public void interpret(Context context) {
System.out.println("PlusExpression --");
String input = context.getInput();
int parsedResult = Integer.parseInt(input);
parsedResult --;
context.setInput(String.valueOf(parsedResult));
context.setOutput(parsedResult);
}
}
import java.util.List;
public class Client {
public static void main(String []args) {
String inputExpr = "10";
Context context = new Context(inputExpr);
List list = new ArrayList();
list.add(new PlusExpression());
list.add(new PlusExpression());
list.add(new MinusExpression());
list.add(new MinusExpression());
list.add(new MinusExpression());
for (int i=0;i<list.size();i++) {
AbstractExpression expression = (AbstractExpression)list.get(i);
expression.interpret(context);
}
System.out.println(context.getOutput());
}
}
/**
* Context
*
*/
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 & subclass
*
*/
abstract class AbstractExpression {
public abstract void interpret(Context context);
}
class PlusExpression extends AbstractExpression {
public void interpret(Context context) {
System.out.println("PlusExpression ++");
String input = context.getInput();
int parsedResult = Integer.parseInt(input);
parsedResult ++;
context.setInput(String.valueOf(parsedResult));
context.setOutput(parsedResult);
}
}
class MinusExpression extends AbstractExpression {
public void interpret(Context context) {
System.out.println("PlusExpression --");
String input = context.getInput();
int parsedResult = Integer.parseInt(input);
parsedResult --;
context.setInput(String.valueOf(parsedResult));
context.setOutput(parsedResult);
}
}
运行并显示Client:
C:\Interpreter>javac *.java
C:\Interpreter>java Client
PlusExpression ++
PlusExpression ++
PlusExpression --
PlusExpression --
PlusExpression --
9
C:\Interpreter>
C:\Interpreter>java Client
PlusExpression ++
PlusExpression ++
PlusExpression --
PlusExpression --
PlusExpression --
9
C:\Interpreter>
发表评论
-
设计模式之 State - 状态模式
2010-12-18 16:49 1122State模式也叫状态模式,是由GoF提出的23种软件设计模式 ... -
设计模式之 Strategy - 策略模式
2010-12-18 16:46 1390Strategy模式也叫策略模 ... -
设计模式之 Visitor - 访问者模式
2010-12-18 16:45 1484Visitor模式也叫访问者 ... -
设计模式之 Template Method - 模板方法模式
2010-12-18 16:41 1601Template Method模式也叫模板方法模式,是由G ... -
设计模式之 Observer - 观察者模式
2010-12-18 16:33 1437Observer模式也叫观察者 ... -
设计模式之 Memento - 备忘录模式
2010-12-18 16:31 1093Memento模式也叫备忘录 ... -
设计模式之 Mediator - 中介者模式
2010-12-18 16:29 1150Mediator模式也叫中介者模式,是由GoF提出的23种软件 ... -
设计模式之 Iterator - 迭代模式
2010-12-18 16:27 1201Iterator模式也叫迭代模式,是由GoF提出的23种设 ... -
设计模式之 Command - 命令模式
2010-12-18 16:20 926Command(CoR)模式也叫命 ... -
设计模式之 Chain of Responsibility - 职责链模式
2010-12-18 16:18 1236Chain of Responsibility(CoR)模 ... -
设计模式之 Proxy - 代理模式
2010-12-16 23:45 1090Proxy模式也叫代理模式,是由GoF提出的23种软件设计 ... -
设计模式之 Flyweight - 享元模式
2010-12-16 23:42 1085Flyweight模式也叫享元模式,是由GoF提出的23种 ... -
设计模式之 Facade - 外观模式
2010-12-16 23:41 1044Facade模式也叫外观模式 ... -
设计模式之 Singleton - 单态模式
2010-11-26 11:58 887Singleton模式也叫单态模式,是由GoF提出的2 ... -
设计模式之 Decorator - 装饰模式
2010-11-25 23:48 838装饰模式,The Decorator Pattern atta ... -
设计模式之 Composite - 组合模式
2010-11-25 23:35 1494Composite模式也叫组合 ... -
设计模式之 Bridge - 桥接模式
2010-11-25 23:08 1044Bridge模式也叫桥接模式,是由GoF提出的23种软件设计模 ... -
设计模式之 Adapter - 适配器模式
2010-11-25 22:58 951Adapter模式也叫适配器模式,是由GoF提出的23种设 ... -
设计模式之Prototype - 原型模式
2010-11-25 22:14 1165Prototype模式也叫原型模式,是由GoF提出的23种设计 ... -
设计模式之 Builder - 建造者模式
2010-11-18 23:51 1100Builder模式也叫建造者模式或者生成器模式,是由GoF ...
相关推荐
解释器模式(Interpreter Pattern)是25种经典设计模式之一,主要应用于创建一个解析语言或者表达式的方式。在本篇文章中,我们将深入探讨解释器模式的概念、结构以及其在实际开发中的应用。 解释器模式是一种行为...
**解释器模式(Interpreter)**是一种行为设计模式,它允许我们定义一种语言并为其创建一个解释器。在软件工程中,这种模式常用于处理简单的语言或表达式,例如配置文件、计算公式或者简单的脚本语言。通过使用解释...
**设计模式之解释器模式(Interpreter Pattern)** 解释器模式是一种行为设计模式,它提供了一种方式来表示语言的语法,并实现一个解释器用于解析这种语法的语句。这种模式通常用于小型、特定领域的语言(DSL)实现,...
解释器模式(Interpreter Pattern)是一种行为型设计模式,用于为特定语言的句法定义一个解释器。它通过定义一个语言的文法表示以及解释器的实现来解析和执行表达式。这种模式通常用于设计语言、脚本或规则引擎。 ...
c++设计模式-行为型模式-解释器模式;qt工程;c++简单源码; 解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式...
- 解释器模式(Interpreter):给定一种语言,定义它的文法表示,并提供一个解释器来处理这种语言中的句子。 - 迭代器模式(Iterator):提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 - 中介者...
C#面向对象设计模式 (行为型模式) Interpreter 解释器模式 视频讲座下载
Interpreter(解释器)模式是一种行为设计模式,它提供了一种方式来表示一种语言的文法,并创建一个解释器来解释语言中的句子。这种模式主要用于解析简单的语言或表达式,例如计算表达式、配置文件等。在计算机科学...
代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象...解释器模式(Interpreter Pattern)、享元模式(Flyweight Pattern)、备忘录模式(Memento Pattern)等...
解释器模式是一种行为设计模式,它定义了一种语言和该语言的解释器,使得可以使用该语言来表达一些特定的操作。该模式适用于需要解释一些特定语言的场景,例如编译器、表达式计算器等。 在 Java 中,可以使用抽象...
- **集成模式**:集成到 EMC 控制系统后,解释器成为控制系统的一部分,与其他模块协同工作,实现更复杂的加工控制功能。 #### 四、RS274/NGC 输入语言详解 RS274/NGC 语言包含了丰富的指令集,用于描述机床的各种...
章节介绍:1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立...10、设计模式之State 11、设计模式之Facade(外观) 12、设计模式之Interpreter(解释器) 13、设计模式之Visitor
创建模式: 设计模式之Factory 设计模式之Prototype(原型) 设计模式之Builder 设计模式之Singleton(单态) 结构模式: 设计模式之Facade(外观) 设计模式之Proxy(代理) ...设计模式之Interpreter(解释器) 设计模式之Visitor
总的来说,"设计模式专题之(二十二)解释模式"是一个关于如何使用Python和C++实现解释器模式的教程,通过学习这个专题,开发者可以理解如何构建一个简单的语言解释器,并了解其背后的原理和优缺点。
3. 解释器模式(Interpreter):给定一种语言,定义它的文法表示,并提供一个解释器来处理该语言中的句子。 4. 迭代器模式(Iterator):提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 5. 中介者模式...
解释器模式是一种行为设计模式,它提供了一种方式来表示语言的语法,并允许你使用该表示来解释语言中的句子。在C#中,解释器模式常用于构建自定义的编程语言或者解析特定格式的数据,例如配置文件、表达式计算等。 ...
<!-- TOC --> - 23种设计模式 - 工厂方法模式(Factory Method) - 抽象工厂模式(Abstract Factory) ... - 解释器模式(Interpreter) - 迭代器模式(Iterator) - 备忘录模式(Memento) - 状态模式(S
GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象编程中最核心的设计原则之一。这些模式可以帮助开发者解决常见的编程问题,并提高代码的可复用性和可维护性。 #### 创建型模式 创建型模式关注的是对象...
- 解释器模式(Interpreter):给定一种语言,定义它的文法表示,并提供一个解释器来处理该语言中的句子。 - 迭代器模式(Iterator):提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 - 中介者模式...
解释器模式(Interpreter Pattern)是一种行为型设计模式,它用于定义一个语言的文法,并解析语言中的表达式。具体来说,解释器模式通过定义一个解释器来解释语言中的表达式,从而实现对语言的解析和执行。 在解释...