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

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

最佳答案

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

09-10 21:25