2010-03-19 72 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

你有沒有想過使用接口去分離類?您有八個類,但您可能只需要幾個接口就可以實現通信/互操作性,並獲得很大的靈活性。

相關問題