2010-03-19 65 views
0

我正在研究一个模拟java中相当大的排队过程的学术项目。模拟器的核心在于一个包含8个类的包,每个包实现一个概念。项目中的每个班级都遵循SRP。这些类封装了模拟器的行为并相互连接了项目中的其他类。在java对象之间实现通信的正确方法是什么?

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

回答

1

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

0

,我已经出现的问题是,大多数这8类都是,因为是合乎逻辑的,我认为,紧耦合和每一个有为了能够有工作所有其他类的知识,在这个包在需要时调用它的方法。

没关系。对于Java组件,最小的实现单元(单个类之外)是包。包中的类可以紧密耦合。只要确保耦合不会泄露到外面(例如使用包保护类)。

应用程序需要每一个类只有一个实例所以它可能是更好的一个新的类来为每个类创建静态字段并用它来拨打电话-instead保留每隔类中的每个类的引用(我敢肯定这是不正确的)

如果这八个类中的每一个都需要一个其他所有七个类的实例,也许你在类中分割功能的方式并不好。如果每个班级都只有一个责任区,为什么会出现这种严重的交叉依赖?

这些类与状态?或者只是一组可能静态的方法集合?

但是,只要这个包的公共接口看起来没问题,我也不会太担心。客户代码是否也需要了解这八个类?

+0

这些类封装了state-full对象并为它们提供了增变器。仅仅因为这个项目是一个模拟实验,不存在客户端。除了初始化模拟变量之外,其他程序参数中没有其他变化。它只是完成并产生结果。这8个类代表具有离散职责的对象,它们必须一起工作才能产生类似于用C编写的串行程序中的主例程,以便模拟起作用。 – imoschak 2010-03-19 12:41:28

0

你有没有想过使用接口去分离类?您有八个类,但您可能只需要几个接口就可以实现通信/互操作性,并获得很大的灵活性。

相关问题