Java 使用观察者和可观察者解决应用程序

Java 使用观察者和可观察者解决应用程序,java,observable,Java,Observable,我有一个应用程序,我需要用户观察员来解决。由于代码实现很长,我想总结一下这个问题 我启动应用程序 我有一个登录窗口,在那里我可以选择秘书或学生 秘书可以在给定课程中为学生添加学生、课程和成绩。 学生只能看到结果 我需要使用Observer,这样,如果一个秘书登录到该应用程序的一个实例中,而一个学生登录到该应用程序的另一个实例中,当秘书为该学生在某个课程中添加结果时,该学生会立即在其列表上看到该新课程及其结果 数据从txt文件中读取 我的解决方案。 SecretaryWindow是一个观察者 St

我有一个应用程序,我需要用户观察员来解决。由于代码实现很长,我想总结一下这个问题

我启动应用程序

我有一个登录窗口,在那里我可以选择秘书或学生

秘书可以在给定课程中为学生添加学生、课程和成绩。 学生只能看到结果

我需要使用Observer,这样,如果一个秘书登录到该应用程序的一个实例中,而一个学生登录到该应用程序的另一个实例中,当秘书为该学生在某个课程中添加结果时,该学生会立即在其列表上看到该新课程及其结果

数据从txt文件中读取

我的解决方案。 SecretaryWindow是一个观察者 StudentWindow是一个观察者 ResultReplositoryFile是可观察的对象

当我单击AddButton时,控制器将结果(studentName、courseName、Result)添加到ResultReplositoryFile。SecretaryWindow观察者会看到,打印一条消息并保存包含ResultReplositoryFile的txt文件

现在在StudentWindow中,我单击Refresh按钮,ResultPositionFile将从此窗口重新加载到列表中,显示新添加的Result.class

这是正确的方法吗,因为我有疑问

如何使用Observer同步同一应用程序的两个实例


感谢阅读,希望您能帮助我。

如果您要让多个人同时使用您的应用程序,您应该使用数据库,而不是文本文件。如果多人同时写入文本文件,文本文件可能会损坏

我建议使用像MySQL这样的关系数据库

因为您的学生窗口有一个刷新按钮,所以您的学生窗口将始终从数据库中提取最新的数据

当秘书将结果添加到数据库时,数据库将锁定,并且在将添加提交到数据库之前,不允许任何人访问该结果(也是唯一的结果)。数据库允许在秘书添加结果的同时访问其他结果

您不需要“观察”和“可观察”,除非您希望向学生发出信号,表明秘书已将结果添加到数据库中

编辑以添加:

“秘书”窗口是“观察到的”,而“观察到的”是秘书添加到文本文件中的结果


“学生”窗口根据可观察到的内容更新窗口。秘书窗口必须能够根据结果的学生id访问学生窗口实例。

我认为您有点热衷于使用观察者设计模式。如果您没有阅读设计模式,您将如何实现它。下面是我解决此问题的方法。当Secorary添加结果时,学生将添加一个标志结果和结果对象的关联 对于一个科目,他将找到所有选择了该科目的已登录学生,秘书将添加该科目的结果并简单地 将结果标志标记为true(显然文本文件/db也需要更新)。这种情况下,您可能不想点击db/文件来获取是否添加了结果 因为一些性能因素。现在当学生刷新页面时,他可以简单地从结果对象中获取它,而不是从数据库中获取。
就个人而言,我更喜欢启动ajax调用(基本上是轮询),而不是刷新。建议使用MySQL而不是文本文件。不管你认为这有多重要,你都错了。事实上比这更重要;)。此外,我认为在这里使用可观察模式是强制性的(我怀疑它在需求中)。感谢您的建议,但不幸的是,数据是从txt文件读取的,使用可观察模式是强制性的(分配要求)。感谢您的建议,但不幸的是,数据是从txt文件读取的,必须使用Observable(分配要求)。我只是不知道如何实现StudentWindow的“更新”,这样当秘书为该学生添加新结果时,结果会自动显示在该学生窗口上,而无需按刷新按钮。还是需要某种刷新输入?该应用程序有两个主界面,一个是SecretaryWindow,另一个是StudentWindow,txt数据文件不是它们唯一的共同点吗?谢谢你的帮助。