常见的网站空间主要有,kuake自助建站系统官网,住房和城乡建设部网站安广东省,做视频网站新手教学Java解释器模式 摘要实现范例 解释器模式#xff08;Interpreter Pattern#xff09;实现了一个表达式接口#xff0c;该接口解释一个特定的上下文 这种模式被用在 SQL 解析、符号处理引擎等 解释器模式提供了评估语言的语法或表达式的方式#xff0c;它属于行为型模式 … Java解释器模式 摘要实现范例 解释器模式Interpreter Pattern实现了一个表达式接口该接口解释一个特定的上下文 这种模式被用在 SQL 解析、符号处理引擎等 解释器模式提供了评估语言的语法或表达式的方式它属于行为型模式
摘要
1. 意图
给定一个语言定义它的文法表示并定义一个解释器这个解释器使用该标识来解释语言中的句子
2. 主要解决
对于一些固定文法构建一个解释句子的解释器
3. 何时使用
如果一种特定类型的问题发生的频率足够高那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器该解释器通过解释这些句子来解决该问题
4. 如何解决
构件语法树定义终结符与非终结符
5. 关键代码
构件环境类包含解释器之外的一些全局信息一般是 HashMap
6. 应用实例
编译器、运算表达式计算
7. 优点
可扩展性比较好灵活增加了新的解释表达式的方式易于实现简单文法
8. 缺点
可利用场景比较少对于复杂的文法比较难维护解释器模式会引起类膨胀解释器模式采用递归调用方法
9. 使用场景
可以将一个需要解释执行的语言中的句子表示为一个抽象语法树一些重复出现的问题可以用一种简单的语言来进行表达一个简单语法需要解释的场景
10. 注意事项
可利用场景比较少JAVA 中如果碰到可以用 expression4J 代替
实现 定义一个接口Expression和实现了Expression接口的实体类定义作为上下文中主要解释器的TerminalExpression类其他的类OrExpression、AndExpression用于创建组合式表达式定义类InterpreterPatternDemo使用Expression类创建规则和演示表达式的解析
范例
1. 创建一个表达式接口.
Expression.java
package com.demo.gof;
public interface Expression {public boolean interpret(String context);
}2. 创建实现接口的实体类
RealImage.java
package com.demo.gof;
public class RealImage implements Image {private String fileName;public RealImage(String fileName){this.fileName fileName;loadFromDisk(fileName);}Overridepublic void display() {System.out.println(Displaying fileName);}private void loadFromDisk(String fileName){System.out.println(Loading fileName);}
}ProxyImage.java
public class ProxyImage implements Image{private RealImage realImage;private String fileName;public ProxyImage(String fileName){this.fileName fileName;}Overridepublic void display() {if(realImage null){realImage new RealImage(fileName);}realImage.display();}
}3. 当被请求时使用 ProxyImage 来获取 RealImage 类的对象
ProxyPatternDemo.java
package com.demo.gof;
public class ProxyPatternDemo {public static void main(String[] args) {Image image new ProxyImage(test_10mb.jpg);//图像将从磁盘加载image.display(); System.out.println();//图像将无法从磁盘加载image.display(); }
}编译运行以上 Java 范例输出结果如下
$ javac -d . src/main/com.demo/gof/ProxyPatternDemo.java
$ java com.demo.gof.ProxyPatternDemo
Loading test_10mb.jpg
Displaying test_10mb.jpgDisplaying test_10mb.jpg