wordpress网站建小程序,通辽大柒网站建设有限公司,论坛发帖,河北seo优化_网络建设营销_网站推广服务 - 河北邢台seo相关文章#xff1a;技术成神之路#xff1a;二十三种设计模式(导航页)
介绍 解释器模式#xff08;Interpreter Pattern#xff09;是一种行为设计模式#xff0c;用于定义一种语言的文法表示#xff0c;并提供一个解释器来处理这种文法。它用于处理具有特定语法或表达… 相关文章技术成神之路二十三种设计模式(导航页)
介绍 解释器模式Interpreter Pattern是一种行为设计模式用于定义一种语言的文法表示并提供一个解释器来处理这种文法。它用于处理具有特定语法或表达式的场景。 1. 定义 解释器模式定义了一种语言的文法表示并定义一个解释器用来解释语言中的句子。
2. 主要作用 提供一种方式来评估语言的文法或表达式解释器模式允许系统解析和执行由文法定义的语言。简化对复杂表达式的处理通过将复杂的表达式分解为简单的表达式可以降低处理的复杂性。易于扩展新的语法可以通过添加新的终结符或非终结符类轻松扩展。
3. 解决的问题 处理和解析特定语言或表达式的需求。提供一种清晰的方式来定义文法及其解释。使得对文法和表达式的扩展变得简单明了。
4. 模式原理 包含角色
抽象表达式Expression 一个接口或抽象类定义了解释方法interpret()。所有具体表达式都要实现这个接口。终结符表达式TerminalExpression 具体的表达式类代表语法中的终结符。在解释器中这些类通常与输入的基本元素对应如某个具体的字符或词汇。非终结符表达式NonterminalExpression 这也是一个具体的表达式类用于解释由多个表达式组成的复杂表达式。它通常用于构造更复杂的语法结构并实现解释方法。上下文Context 上下文对象用于存储解释器的状态信息包括输入字符串和其他相关数据。它在解析过程中提供必要的上下文信息给各个表达式。
UML类图 示例代码
// 抽象表达式
interface Expression {int interpret();
}// 终结符表达式数字
class Number implements Expression {private int number;public Number(int number) {this.number number;}Overridepublic int interpret() {return number;}
}// 非终结符表达式加法
class Add implements Expression {private Expression leftExpression;private Expression rightExpression;public Add(Expression left, Expression right) {this.leftExpression left;this.rightExpression right;}Overridepublic int interpret() {return leftExpression.interpret() rightExpression.interpret();}
}// 非终结符表达式减法
class Subtract implements Expression {private Expression leftExpression;private Expression rightExpression;public Subtract(Expression left, Expression right) {this.leftExpression left;this.rightExpression right;}Overridepublic int interpret() {return leftExpression.interpret() - rightExpression.interpret();}
}调用
public class InterpreterDemo {public static void main(String[] args) {// 表达式3 5Expression three new Number(3);Expression five new Number(5);Expression add new Add(three, five);System.out.println(Result: add.interpret()); // 输出: Result: 8// 表达式10 - 2Expression ten new Number(10);Expression two new Number(2);Expression subtract new Subtract(ten, two);System.out.println(Result: subtract.interpret()); // 输出: Result: 8}
}emm…这个模式才是冷门中的冷门由于只能在特定领域使用让我们动手写的情况很少一般只是在源码中会见到下面就举几个源码中的例子吧加深下印象
1. Java 正则表达式 正则大家都用过吧可以把一些特定的字符 通过正则转化为我们预期的效果在正则表达式中 Pattern类负责解析正则表达式的语法而Matcher类则用于执行该模式的匹配。
2. Android 自定义 View 的属性解析 自定义视图会解析 XML 中定义的属性,在自定义视图的构造函数中通过AttributeSet来解析XML中定义的属性类似于解释器的功能。
3. DSL (领域特定语言) 解析 DSL 正如其名在特定领域下的语言这个语言可以由你自己定制常见的在Kotlin中 有很多语法糖 都运用了DSL在一些指定场景下很实用在Android开发中Gradle构建脚本使用一种基于Groovy的DSL来定义构建配置Gradle解析器使用了解释器模式。
这个模式不要求一定要掌握但要见到认识给面试官能吹nb就行了。
5. 优缺点 优点
易于改变和扩展文法。容易实现简单的语言解释器。
缺点
对复杂的文法不太适用类数目会增加。解释器模式会引起性能问题。
6. 应用场景 解析特定的语言或格式例如数学表达式、SQL查询、正则表达式。定义简单的文法规则并提供语法分析功能。在领域特定语言DSL中提供一种简单的语法解析方式。
7. 总结 解释器模式适用于简单的语法解析和解释场景但不适合复杂的语法结构。它通过类和对象的组合灵活定义和扩展语法结构。 至此23种设计模式告一段落