2012-02-04 69 views
0

新的,這裏是我problem--共享一個實例,但創造的每個新工藝

我有4個班 - 起動器,數據庫和調度和測試類。

測試類將創建一個Starter的新實例(加載並啓動整個過程)。 初學者初始化調度程序和數據庫類。

測試類將數據傳遞給啓動器。 Starter將其存儲在Database類的HashMap中。 調度程序讀取數據庫類中的相同的 HashMap。

我們保證完全相同的HashMap的是所有類的訪問在我的Java項目,我有2個選項,使HashMap的靜態或使數據庫中的一個單例類。現在我已經爲數據庫創建了一個單例類。

如果Test類執行此

起動starterInstance1 =新啓動器的problem--();

Starter starterInstance2 = new Starter();

我該如何確保starterInstance1和starterInstance2擁有自己的Database類或HashMap的實例?

==========

就更加明顯:

類測試{

入門啓動1 =新入門(); //創建我的應用程序的1個實例

start1.init(); //這將初始化調度程序等,並做了一個 「getDatabaseInstance()」

對(INT I = 0;我< 50;我++){

start1.sendData(「abc」); //將所有這50個請求提交給一個線程池,該線程池將發送請求以存儲在數據庫類中的HashMap中。 HashMap將由Scheduler和其他類同時訪問。我已經創建了數據庫類singleton,以便所有類都將訪問同一個數據庫實例。

}

//同樣創建我的應用程序的另一實例

起動START2 =新起動();

start2.init(); //現在這裏如果我做「getDatabaseInstance()」,我會得到與上面相同的實例。但我想爲這個應用程序的實例單獨的數據庫。我如何實現這一目標?

對(INT I = 0;我< 50;我++){

START2。的SendData( 「ABC」);

}

}

+0

如果數據庫是一個單身,我不明白他們怎麼可能有不同的實例。這是單身模式的重點。你的問題的一部分說,所有的類都必須訪問同一個確切的映射,另一個說每個起始器實例都應該有自己的實例。你想要什麼? – 2012-02-04 08:49:42

+0

是的單身意味着只有一個實例。但我不想那樣。我的整個應用程序的起點是Starter類。每當創建一個新的應用程序實例(即新的Starter())時,我希望它有自己的數據庫和它自己的調度程序,它們將訪問同一個數據庫。使數據庫成爲單例類不是這裏的解決方案,它意味着每個新的Starter()都將使用同一個數據庫。我希望每個新的Starter()都有自己的數據庫 – anzaan 2012-02-04 13:43:17

回答

1

最普遍的回答你的問題很可能是簡單地讓一個參考的Starter跟蹤到它自己的Database。當然,Scheduler會做同樣的事情:

public class Starter { 
    Database db; 
    Starter(Database db) { 
     this.db = db; 
    } 
} 

/* ... */ 

Database db1 = new Database(); 
Starter starter1 = new Starter(db1); 
Scheduler scheduler1 = new Scheduler(db1); 

Database db2 = new Database(); 
Starter starter2 = new Starter(db2); 
Scheduler scheduler2 = new Scheduler(db2); 
+0

是的,這是一種方法。但是我的應用程序有點複雜。我正在使用mina nio框架通過TCP連接傳輸數據。我將需要遍佈我的應用程序的這個數據庫的實例。所以我不能將它傳遞給每個班級。此外,我在客戶端的SessionHandler中使用它。我不能通過數據庫實例作爲構造函數參數。 thnx你的建議順便說一句! – anzaan 2012-02-04 13:49:16

+0

除非每個Starter都有自己的線程(在這種情況下,您可以將數據庫存儲在ThreadLocal中),否則我沒有看到任何其他方式。如果您有太多需要訪問數據庫實例的類,那麼您可能會遇到設計問題,並且缺少封裝。 – 2012-02-04 13:56:45

+0

我同意你的意見。我相信這是一個設計問題。但我已經脖子深了,並在完成的結束日期!將只會討論ThreadLocal。同時你能爲此提出一個設計模式嗎? – anzaan 2012-02-04 14:13:05

相關問題