Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 复杂计算器的对象模型_Java_Oop_Design Patterns - Fatal编程技术网

Java 复杂计算器的对象模型

Java 复杂计算器的对象模型,java,oop,design-patterns,Java,Oop,Design Patterns,我正在考虑一个对象结构,它将进行复杂的计算。根据用户GUI上的条目进行计算 公式如下所示: A = B+C; B = D*E; C = C; (simply value insert by the user) D = C/E; E = C*C; 用户可以在所有值上输入值(A到E/在实际项目中,大约有210个变量)。如果无法开发数学公式来计算其他值,则将通过迭代这些值来完成,直到找到“工作设置” 我现在考虑的是以下结构: 每个变量都是数据类的对象。每个数据类都可以在其他数据类上注册一个侦听器,以

我正在考虑一个对象结构,它将进行复杂的计算。根据用户GUI上的条目进行计算

公式如下所示:

A = B+C;
B = D*E;
C = C; (simply value insert by the user)
D = C/E;
E = C*C;
用户可以在所有值上输入值(A到E/在实际项目中,大约有210个变量)。如果无法开发数学公式来计算其他值,则将通过迭代这些值来完成,直到找到“工作设置”

我现在考虑的是以下结构: 每个变量都是数据类的对象。每个数据类都可以在其他数据类上注册一个侦听器,以获取值更改事件。如果一个数据类get是一个值更改事件,它将重新计算自身并通知所有侦听器它自己的数据更改

现在的问题是: 如果此链中的最后一次计算得到的结果是输入的值不可能(例如“除以零”),它将其值设置为最接近的可能值(在本例中为1)。然后,必须按照相反的顺序再次进行链中的所有计算

在你看来,有没有一种结构比这种基于侦听器的结构更好,在这种结构中,如果每个人都检测到观察到的变量发生了变化,就会重新计算(有了210个veriables,我将失去谁计算什么、什么时候以及为什么计算的概述;对于我来说,一个中央计算结构似乎更易于维护,但我无法想象一个好的中央计算单元结构)

欢迎提出任何意见和建议! 干杯
Joan

您正在实现的被称为。本文还提到,直接使用observer模式可能会导致性能问题


有几个库实现了对这种编程模型的支持,您可以查看其中的一些库并了解它们在做什么。据我所知,其中许多库使用依赖关系的图形视图,并且仅当新值到达所有可访问的输入时才重新计算表达式的值。

经过大量的在谷歌的时间里,我在谷歌代码中发现了一个有趣的反应式java项目:

我还没有尝试过这个项目,但与我发现的其他项目(、和)不同,它似乎仍处于活跃状态,正在开发中。提到的其他项目要么不再可用,要么在几年前进行了最后一次更改

更新:在玩了reactive4java之后,我得出结论,这个项目不能在oop环境中用于您的计算。这对我来说是不可能的(到目前为止)将项目中的任何对象或值与反应式内核绑定,反之亦然


更新2:在与项目的维护人员交谈后,有人向我指出如何将数据对象与reactive4java框架绑定,以便在数据对象发生变化时,框架进行计算。在使用该框架之后,我将发布一个详细的工作示例。

我已经看过多年的反应式编程go-但我认为,通过这种编码,您无法更好地了解您的项目。它只是让您摆脱了对观察者和事件的处理。

谢谢您的回答:我正在阅读java中的RP,但到目前为止,我还没有找到具体的实现。也许我在这里得到了更多信息-无论如何,我会回来告诉您的。谢谢您这么久@Patrick我对此也很感兴趣,在谷歌上搜索了一段时间。不幸的是,我找不到一个正在实施反应式编程的活动/工作项目。你能在回答中提供一两个例子吗?嗨!这是我创建的示例应用程序: