java - 实现java对象之间通信的正确方法是什么?

标签 java design-patterns oop static-members

我正在开展一个学术项目,该项目用 java 模拟一个相当大的排队过程。模拟器的核心位于一个包中,其中存在 8 个类,每个类都实现一个概念。项目中的每个类都遵循 SRP。这些类封装了模拟器的行为并互连项目中的所有其他类。

出现的问题是,这 8 个类中的大多数(我认为这是逻辑上的)是紧密耦合的,并且每个类都必须了解此包中的每个其他类的工作知识,以便能够从中调用方法需要的时候。应用程序只需要每个类的一个实例,因此最好为新类中的每个类创建静态字段并使用它来进行调用,而不是在每个类中为包中的每个其他类保留引用(我我确信这是不正确的)-,但这被认为是正确的设计解决方案吗?或者是否有更适合我的需求的设计模式?

最佳答案

听起来你有一种复杂的状态机。您可以将对象之间的方法调用抽象为异步事件。每个对象可以将通用事件发送到“路由器”对象,而不是直接调用其他对象上的方法。路由器对象会将事件转发给在路由器上注册监听器的任意数量的对象。您可以在监听器或路由器算法中实现过滤器来限制谁接收事件。状态变化也将作为事件发布。
如果您使用 JMS 服务器作为“路由器”,您甚至可以将对象分布在多个主机上。
这种方法以公共(public)事件架构/接口(interface)的形式在对象之间提供了一个简单、可重用的接口(interface)。

关于java - 实现java对象之间通信的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2477123/

相关文章:

java - 什么是NullPointerException,我该如何解决?

java - java中的观察者设计模式

java - 您能否分析一下有关继承的 JAVA 代码的输出

java - 在 Dropwizard 中使用 Curl 命令实现 Restful Webservices Post 请求

java - Junit 和 java 类。

c - 如何在 "object oriented"C中动态初始化数组?

java - 从 Java 的角度来看, 'self' 和 'new' 在 Ruby 中意味着什么?

javascript - 在 JavaScript 中创建集合(相同类型的唯一元素)时,通常使用什么作为键的值?

java - 如何使用Java将环境变量传递给另一个程序

java - 泛型和字段如何在 Standalone Java 应用程序中辅助 DAO 模式