[英]Singleton design & new objects inside it
在這里的一個特定場景中,
我有一個名為 UserManger 的管理器,用於為用戶處理 CRUD
這位經理是“單身人士”,設計上是正確的。
但是在更新方法中我有邏輯
public User update (User u)
{
// This line is problematic?
User u1 = new User();
copy(u,u1);
//Some logic
dao.update(u);
}
在 singleton 管理器中創建任何新對象會有問題嗎? 特別是對於一個非常並發的系統。
將要
public User update (User u, User u1)
{
copy(u,u1);
//Some logic
dao.update(u);
}
解決我的問題?
僅在 singleton 方法中創建 object 不會導致任何問題。 畢竟,您沒有在線程之間共享任何 state。
如果您在 singleton 本身中有 state,您將遇到潛在的問題 - 但您所展示的只是創建一個局部變量,而不是更改實例變量。 方法的每次調用都有自己完全獨立的一組局部變量。 兩個線程都可以執行相同的方法,但它們不會看到彼此的局部變量。
不,但如果你把
User u1;
作為全局變量,它會引起問題。
但我有一個問題,你為什么不這樣編碼?
public User update (User u)
{
//Some logic
User u = dao.update(u);
return u;
// OR return dao.update(u);
}
你不需要在這里復制。 在此方法中,復制需要為用戶 object 分配 2 倍的 memory。
在不了解您的系統的情況下,我不得不打電話來質疑這里描述的設計模式。 Singleton和SomethingManager都是反模式。
您可能只需要為UserManager
考慮一個更具描述性的名稱,但我強烈建議使用像Spring這樣的IoC框架將其注入到需要的地方,而不是將其固定為“全局”(本質上就是 singleton 的含義) .
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.