使用Observer和Observable解决应用程序

时间:2012-12-17 15:20:53

标签: java observable

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

我开始申请。

我有一个LogInWindow,我可以选择秘书或学生。

秘书可以为特定课程的学生添加学生,课程和成绩。 学生只能看到结果。

我需要使用Observer,以便如果一个秘书登录该应用程序的实例并且学生登录该应用程序的另一个实例,当秘书在该课程中为该学生添加结果时,该学生立即看到列出新课程及其结果。

从txt文件中读取数据。

我的解决方案。 秘书窗口是观察员 StudentWindow是一名观察员 ResultRepositoryFile是Observable对象

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

现在在StudentWindow中,我单击一个RefreshButton,并在此窗口的列表中重新加载ResultRepositoryFile,显示新添加的Result.class

这是正确的做法,因为我有疑问。

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

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

2 个答案:

答案 0 :(得分:3)

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

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

由于您的学生窗口有一个刷新按钮,您的学生窗口将始终从数据库中提取最新数据。

当秘书将结果添加到数据库时,数据库将锁定,并且不允许任何人访问该数据库,并且只有在将add添加到数据库之后才会生成结果。数据库允许在秘书添加结果的同时访问其他结果。

您不需要Observed和Observable,除非您想要通知学生秘书已将结果添加到数据库中。

编辑添加:

秘书窗口是Observed,Observable是秘书添加到文本文件的结果。

学生窗口根据Observable更新窗口。秘书窗口必须能够根据结果的学生ID访问学生窗口实例。

答案 1 :(得分:1)

我认为你有点热衷于使用观察者设计模式。你还没有读过设计模式,你将如何实现它。这就是我解决这个问题的方法。学生将添加一个标志结果和一个结果对象的关联当seceratary添加结果 对于一个主题,他会找到所有登录的研究者,他们已经选择了哪个秘书将添加结果和简单的主题 将结果标志标记为true(显然文本文件/ db也需要更新)。当你不想点击DB /文件只是为了获取是否添加了结果时,可能就是这种情况 由于某些性能因素。当学生刷新页面时,他可以简单地从结果对象中提取它而不是从db中获取。 我个人更喜欢发起ajax调用(基本上是轮询)而不是刷新