解释器模式 Interpreter Pattern
来源:互联网 发布:ipad看电脑版淘宝店铺 编辑:程序博客网 时间:2024/05/29 12:26
一、什么是解释器模式
Interpreter模式也叫解释器模式,是行为模式之一,它是一种特殊的设计模式,它建立一个解释器,对于特定的计算机程序设计语言,用来解释预先定义的文法。简单地说,Interpreter模式是一种简单的语法解释器构架。
二、解释器模式应用场景
当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。
而当存在以下情况时该模式效果最好:
该文法简单对于复杂的文法,文法的类层次变得庞大而无法管理。此时语法分析程序生成器这样的工具是更好的选择。它们无需构建抽象语法树即可解释表达式,这样可以节省空间而且还可能节省时间。
效率不是一个关键问题,最高效的解释器通常不是通过直接解释语法分析树实现的,而是首先将它们转换成另一种形式。例如,正则表达式通常被转换成状态机。但即使在这种情况下,转换器仍可用解释器模式实现,该模式仍是有用的。
三、解释器模式的结构
四、解释器模式的角色和职责
Context
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.javapublic 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.javapublic 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.javaimport 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)
- 解释器模式(Interpreter Pattern)
- 解释器模式 Interpreter Pattern
- 解释器模式(Interpreter Pattern)
- 解释器模式(Interpreter Pattern)
- 解释器模式 Interpreter Pattern
- 解释器模式--Interpreter Pattern
- 解释器模式 | Interpreter Pattern
- 设计模式 - Interpreter Pattern(解释器模式)
- 设计模式 - Interpreter Pattern(解释器模式)
- 设计模式【解释器模式Interpreter Pattern】
- 解释器模式(Interpreter Pattern)
- 原始的解释器模式(Interpreter Pattern)
- 解释器模式(Interpreter Pattern)
- Java Interpreter Pattern(解释器模式)
- 乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern)
- 设计模式读书笔记之解释器模式(Interpreter pattern)
- 设计模式之解释器模式(Interpreter Pattern)
- 排序算法稳定性
- Cookie文件说明及IE的Cookie文件格式
- myeclipse9中建flex项目
- SQL找出表中某个字段无重复值的三个字段
- android dialog 背景透明的样式
- 解释器模式 Interpreter Pattern
- N皇后问题
- 用C#写的俄罗斯方块代码参考
- `nonmutating' is not defined (Ice)
- mini2440之/proc 目录中的文件创建及测试
- 交换函数的两种不同的实现方式------地址传递和引用参数
- 能打印出详细信息的log4j的配置
- 全国高校综合排名
- CString类型转化为string