Java23种设计模式-行为型模式之解释器模式

2024-04-27 12:52

本文主要是介绍Java23种设计模式-行为型模式之解释器模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

解释器模式(Interpreter Pattern):定义了一种文法,并且对于任何该文法的句子,都能够解释和执行。可以将复杂的问题分解成一系列简单的表达式,然后使用解释器来解释这些表达式。

涉及角色
抽象表达式(Abstract Expression):定义一个抽象的解释操作,通常包含一个interpret()方法,用于解释语句。
终结符表达式(Terminal Expression):实现抽象表达式中的interpret()方法,表示语言中的终结符。
非终结符表达式(Non-terminal Expression):实现抽象表达式中的interpret()方法,表示语言中的非终结符。
上下文(Context):包含解释器解释的信息的类。
客户端(Client):创建并配置表达式的类。

示例:定义了抽象表达式Expression、终结符表达式NumberExpression、非终结符表达式AddExpression以及上下文Context。通过这些类的协作,我们可以解释一个简单的加法表达式,并输出计算结果

// 上下文
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;}
}
// 抽象表达式
interface Expression {int interpret(Context context);
}
// 终结符表达式
class NumberExpression implements Expression {private int number;public NumberExpression(int number) {this.number = number;}@Overridepublic int interpret(Context context) {return number;}
}
// 非终结符表达式
class AddExpression implements Expression {private Expression left;private Expression right;public AddExpression(Expression left, Expression right) {this.left = left;this.right = right;}@Overridepublic int interpret(Context context) {return left.interpret(context) + right.interpret(context);}
}
// 客户端
public class InterpreterPatternTest {public static void main(String[] args) {Context context = new Context("1 + 2 + 3");Expression expression = new AddExpression(new NumberExpression(1), new AddExpression(new NumberExpression(2), new NumberExpression(3)));int result = expression.interpret(context);System.out.println("Result: " + result);}
}

这篇关于Java23种设计模式-行为型模式之解释器模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940558

相关文章

Java 高级面试问题及答案 更新(一)

Java 高级面试问题及答案 1. 请解释Java内存模型以及它在多线程编程中的重要性。 答案: Java内存模型(Java Memory Model, JMM)定义了Java程序在执行时,变量在内存中的存储和访问规则。它确保了在多线程环境中,各个线程对共享数据的一致性和同步操作的原子性。JMM规定了线程之间共享变量的读写操作,必须遵循特定的规则,以避免内存一致性错误,如竞态条件和死锁。 在

约瑟夫问题No.2 C/C++和Java代码

题目描述 问题 n个小孩围坐成一圈,并按顺时针编号为1,2,…,,从编号为p 的小孩顺时针依次报数,由1报到m,报到m时,这名小孩从圈中出去;然后下一名小孩再从1报数,报到m 时再出去。以此类推,直到所有小孩都从圈中出去。请按出去的先后顺序输出小孩的编号。 输入 第一个是n,第二个是p,第三个是 m(0<m,n<300)。 最后一行是:0 0 0。 输出 按出圈的顺序输出

andriod第三课----java高级语法2

static 关键字 1.static 不能用于修饰构造器2.静态方法是属于类的,静态成员也是属于类的,类一加载就存在。引用时不需要创建对象再用,而可以直接“类名.方法或成员”3.只要类在,他就在,可以记录上一次保存的结果4.静态方法只能访问静态成员,而静态成员却可以被任何方法访问。5.修饰初始化块,使得初始化块只在类加载时被初始化一次(若不加static则每次创建对象都会调用一次初始化块)

andriod第二课----java高级语法

继承 extends关键字与c++不同,只能单继承可以重载父类的方法也可以将父对象中的成员重新定义 访问父对象的构造函数 super()函数只能在构造器中第一条语句位置调用。super("哇哈哈");调用父类的有参构造器。不写super时默认调用父对象的无参构造函数 this 指针解决同名成员 this 指针总是指向当前对象 this 指针构造方法 this(),

android运用第一课-----java基础语法

权限关键字 1.默认: 对于成员:不写时默认为default,比public稍严格对于方法:不写时默认为default,比public稍严格 2.public : 公有的:外部类中可访问,内部类中更可访问 3.private: 私有的,在当前类中可以访问,在外部类中不能访问。 4.protect: package语法 包,包名一般是小写字母域名反写。打包命令: java

java 读取 access数据库

java读取access数据库信息     1、java读取access数据库不需要任何jar包,只需要.mdb文件,文件路径,数据库表名即可!     2、加载数据库驱动,sql语句,源码如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.

SpringBoot之Zuul服务

概述 Spring Cloud Netflix zuul组件是微服务架构中的网关组件,Zuul作为统一网关,是所有访问该平台的请求入口,核心功能是路由和过滤。 目前公司业务就是基于Zuul搭建的网关服务,且提供的服务包括转发请求(路由)、黑名单IP访问拦截、URL资源访问时的权限拦截、统一访问日志记录/异常处理/单点登录引导功能。本文主要内容:Zuul的执行流程、Zuul过滤实现、Zuul安全

JavaScript中指定大小分割数组的一种实现

今天分享一个使用JavaScript分割数组为多个自数组的方法实现。我使用它的场景如下: 给定一个数组 arr 和指定大小 fixed: const arr = [{id: 1,name: 'name1'},{id: 2,name: 'name2'},{id: 3,name: 'name3'},{id: 4,name: 'name4'},{id: 5,name: 'name5'},{id: 6

设计模式——迭代器模式(Iterator)

迭代器模式(Iterator Pattern)是一种行为设计模式,它使得我们能够顺序地访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式为遍历不同的聚合结构提供了一个统一的接口,使得客户端代码可以独立于聚合对象的变化。 迭代器模式结构 迭代器模式主要由以下几个角色组成: 迭代器(Iterator):定义访问和遍历元素的接口。具体迭代器(Concrete Iterator

go设计模式之建造者设计模式

建造者设计模式 建造者模式也叫生成器模式。 生成器模式是一种创建型设计模式, 目标是将复杂对象的构造与其表示分离,以便相同的构造过程可以创建不同的表示。 案例 igloo­Builder冰屋生成器与 normal­Builder普通房屋生成器可建造不同类型房屋, 即 igloo冰屋和 normal­House普通房屋 。 每种房屋类型的建造步骤都是相同的。 主管 (可选) 结构体可对建造过