簡體   English   中英

Singleton 設計和里面的新對象

[英]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。

在不了解您的系統的情況下,我不得不打電話來質疑這里描述的設計模式。 SingletonSomethingManager都是反模式。

您可能只需要為UserManager考慮一個更具描述性的名稱,但我強烈建議使用像Spring這樣的IoC框架將其注入到需要的地方,而不是將其固定為“全局”(本質上就是 singleton 的含義) .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM