类之间的Java数据文件共享
我正在制作一个从文件(序列化objectInputStream)读取的小程序,该文件是一个注册表列表,其中每个条目都有一个设置为true或false的布尔变量 在这个程序中,我有两个独立的JPanel类。一个是A类,可以改变这些变量的值,另一个是B类,检查这些变量是真是假。 这两个类是在带有main方法的gui类下创建的 如果我更改了A类中的变量,如何在B类中看到新的更新值? 我试着在每个类中进行ObjectInput-output流。这意味着,对于每次更改,类都会将其写入一个文件,并在更改/读取之前将其读回。 这是可行的,但它是最优的吗?有更好的方法吗 您可以针对这种情况或用例使用设计模式 观察者模式是一种软件设计模式,其中对象, 名为subject,维护其从属项的列表,名为 观察者,并自动通知他们任何状态更改, 通常通过调用他们的方法之一。它主要用于 实现分布式事件处理系统类之间的Java数据文件共享,java,file,class,share,Java,File,Class,Share,我正在制作一个从文件(序列化objectInputStream)读取的小程序,该文件是一个注册表列表,其中每个条目都有一个设置为true或false的布尔变量 在这个程序中,我有两个独立的JPanel类。一个是A类,可以改变这些变量的值,另一个是B类,检查这些变量是真是假。 这两个类是在带有main方法的gui类下创建的 如果我更改了A类中的变量,如何在B类中看到新的更新值? 我试着在每个类中进行ObjectInput-output流。这意味着,对于每次更改,类都会将其写入一个文件,并在更改/读
您可以创建一个C类来保存您读取的信息。因此,B类读取数据并将信息放入C类。当A类更改A值时,它将触发事件通知B类
您可以使用
HashMap
来存储数据。字符串是值的名称,布尔值是值。然后,您可以在类B中创建类似于public void update(字符串名称,布尔newValue)
的方法。此方法将更新值,然后在需要通知新值的所有类中调用方法 我认为这是和模式的典型用例
控制器
注册模型及其观察者
它接收进行更改的请求(事件),并将其委托给模型
。当模型更改时,它会通知观测者模型有一个新状态,他们应该采取措施来获得这些更改
在您的情况下,Main
可以用作控制器
,观察者
将是您的Panel1
和Panel2
剩下的是模型
,您需要创建一个新类,它只处理文件的读写。实际上,您似乎在A级中拥有此代码,即Panel1
。此代码需要从它移动到新类
注意,jdk已经提供了一个接口和一个类
编辑
java()中的简单示例您应该将数据与gui分离。尝试使用模型视图控制器设计。 此外,您还可以在类A/B中使用ActionEvents/ActionListeners。
请提供有关数据显示方式的更多信息。+1用于显示
MAIN
。呵呵,非常感谢!我回答得太慢了。请参阅A4L和JSS的答案。他是否应该使用Observer设计模式?好的,那么,如果我创建一个C类,使用读方法和写方法(ObjectOutputStream和ObjectInputStream)。然后在每个类A和B中,我用C methodClass=new C()实现类C;然后调用methodClass.readFromFile();或methodClass.writeToFile();因为我不能使它们成为静态方法,是吗?你可以将C类作为一个单例类。因此,您不调用类C的构造函数,而是调用一个静态方法(例如,getInstance()
)来检索类C的实例。然后类C持有自己的实例(也是静态的),如果该值为null(起始值),则类C在getInstance()
@JSS中调用自己的构造函数。我不知道这是否更好。如果有更多的课程来听这个事件,那就更好了。但是对于两门课。。我不知道……谢谢你的回答!=)我没有创建getInstance,但是我通过类A和B的构造函数发送了类C。然后在每个类中分别调用C的读/写方法,每次进行更改时。我想知道,这比观察者设计模式消耗更多的计算机能力吗?嗨,谢谢你的回答。我试着读了一些关于观察者和可观察类的书。你知道有没有关于如何使用它的教程/实践示例或解释?@fuLLMetaLMan嗨,我给你做了一个基本示例,请参见编辑部分的链接。zip包含一个eclipse项目。代码没有注释,很抱歉,但是它非常自我解释。哇!谢谢这是一个非常酷的例子。我不知道为什么我以前没有使用过Observer接口。。“更新”方法,你可以在里面放任何东西,对吗?我很快会留出一些时间,真正了解观察者/可观察到的东西。您知道这种使用观察者的方法是否比从单独的类调用读/写方法更有效,如上面提到的马拉卡?再次感谢您提供的精彩示例!=)=)@不客气!与MalaKa的建议相比,我想说它几乎是一样的(C类->模型,火灾事件->通知观察者,更新->更新),他只是没有给它起一个名字,这就是一般的意思:它们描述了软件开发过程中经常遇到的问题,展示如何解决这些问题的标准方法,并给洞命名、Obeserver、MVC、Factory或其他…@fuLLMetaLMan在您的用例中Observer+MVC再合适不过了!它们的好处是通过松散耦合业务逻辑和视图来分离责任,从而使两者易于扩展和维护。