设计模式(15)------解释器模式
来源:互联网 发布:男子遭遇网络诈骗 编辑:程序博客网 时间:2024/06/05 07:56
解释器模式作用:
给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。
应用场景:
(1)有一个简单的语法规则,比如一个sql语句,如果我们需要根据sql语句进行rm转换,就可以使用解释器模式来对语句进行解释。
参与对象:
(1)AbstractExpression(抽象表达式)
声明一个所有具体表达式都要实现的抽象接口(或者抽象类),接口中主要是一个interpret()方法,称为解释操作。
(2)TerminalExpression(终结符表达式)
实现与文法中的元素相关联的解释操作,通常一个解释器模式中只有一个终结符表达式,对应一个实例。
(3)NonterminalExpression(非终结符表达式)
为文法中的非终结符实现解释(interpret)操作。
(4)Context(上下文)
包含解释器之外的一些全局信息。
(5)Client(客户端)
调用解释器。
eg:
AbstractExpression
package com.lanhuigu.base.design.behavior.interpreter;/** * AbstractExpression: 声明一个所有具体表达式都要实现的抽象接口(或者抽象类), * 接口中主要是一个interpret()方法,称为解释操作 */public abstract class Expression {abstract void interpret(Context ctx);}
Expression
高级解释器
package com.lanhuigu.base.design.behavior.interpreter;/** * Expression:实现与文法中的元素相关联的解释操作 */public class AdvanceExpression extends Expression{@Overridevoid interpret(Context ctx) {// TODO Auto-generated method stubSystem.out.println("高级解析器");}}
普通解释器
package com.lanhuigu.base.design.behavior.interpreter;/** * Expression:实现与文法中的元素相关联的解释操作 */public class SimpleExpression extends Expression {@Overridevoid interpret(Context ctx) {// TODO Auto-generated method stubSystem.out.println("普通解释器");}}
Context
package com.lanhuigu.base.design.behavior.interpreter;import java.util.ArrayList;import java.util.List;/** * * Context: 包含解释器之外的一些全局信息 */public class Context {private String context;private List list = new ArrayList();public String getContext() {return context;}public void setContext(String context) {this.context = context;}public List getList() {return list;}public void setList(List list) {this.list = list;}public void add(Expression eps) {list.add(eps);}}
Client
package com.lanhuigu.base.design.behavior.interpreter;/** * Client: 调用解释器 */public class Test {public static void main(String[] args) {Context ctx = new Context();ctx.add(new SimpleExpression());ctx.add(new AdvanceExpression());ctx.add(new SimpleExpression());for (int i=0;i<ctx.getList().size();i++) {Expression eps = (Expression) ctx.getList().get(i);eps.interpret(ctx);}}}
运行结果:
0 0
- 设计模式(15)------解释器模式
- 设计模式(15)-解释器模式
- 设计模式(15)--解释器模式
- 设计模式(15)--解释器模式
- 设计模式15 - Interpreter 解释器模式
- 设计模式(14):解释器模式
- c++设计模式(解释器模式)
- 设计模式:解释器模式(Interpreter)
- 设计模式:解释器模式(Interpreter)
- 设计模式(21)-解释器模式
- [设计模式]解释器模式(Interpreter)
- 【设计模式 - 15】之解释器模式(Interpreter)
- 设计模式 解释器模式
- 设计模式-解释器模式
- 设计模式:解释器模式
- 设计模式:解释器模式
- 设计模式-解释器模式
- 设计模式-解释器模式
- MongDB基础学习(六)—— 【MongoDB for Java】Java操作MongoDB
- 对Sql Server表字段进行修改
- Codeforces-719B-Anatoly and Cockroaches
- 跟着鬼哥学爬虫-4-根据需求爬工作需要内容
- WPF DevExpress 更换主题
- 设计模式(15)------解释器模式
- TI zigbee UART的两种模式
- Mac 下使用ISIS 处理数据 -CTX,HiRISE,LRO
- 设计模式(16)------迭代器模式
- 设计模式(17)------中介者模式
- 这只是一个测试博客Visual Studio Ultimate 2013,vs2013.5_ult_chs.iso,vs2013.5_ult_enu.iso
- Hi3516A开发--ethtool安装和使用
- 设计模式(18)------备忘录模式
- 设计模式(19)------观察者模式