2014-05-12 100 views
0

我不想首先知道單身人士和靜態類之間的區別。 我想知道什麼時候人們應該使用單例類和靜態類。單身人士和靜態類c的實際使用情況#

在我的應用程序我使用靜態類的助手或工具方法,並使用單身的數據庫連接和錯誤記錄器類。但藉助靜態類可以用來返回sql db連接對象以及錯誤日誌記錄系統。

我真的很想知道其他高級開發人員在哪裏使用單例類,以及他們在哪裏使用靜態類。

如果有人通過示例情況和示例代碼討論此問題,它將非常有幫助。謝謝

回答

0

一個非常廣泛的問題,但會給你第一個彈出我的腦海使用Singleton的理由。

當您需要管理一些緩存對象的生命週期時,Singleton比專用靜態類更合適。當您想要刷新狀態而不必擔心線程安全時,單例就非常完美,例如,如果您有一個正被用作單例的類,並且它有許多緩存的屬性或列表中的傳入請求可能需要訪問。

Refresh()方法可以簡單地將當前實例設置到一個新的實例和不具有刷新類的各個屬性:

private static YourClass instance = new YourClass(); // first instance 

public static void Refresh(){ 
    instance = new YourClass(); // creates a new, refreshed instance while not needing to worry about thread safety 
} 

public static YourClass Instance{ 
     get{ 
     return instance; 
     } 
} 
1

如果你正在創建鬆散耦合的系統,那麼你不能使用靜態類(因爲它們不能實現抽象並且不能被注入)。靜態類也很難模擬,所以如果你正在進行TDD或簡單的單元測試,這不是你的選擇。所以,我只將它們用於與業務需求無關的依賴關係,不應該被嘲笑。例如。基礎設施邏輯如日誌記錄或映射

如果我不能擴展現有的類,但想要方便的類成員API,我也使用擴展方法的靜態類。通常這也是基礎設施相關的擴展,如映射或序列化,它們不包含業務邏輯。

0

我通常在創建數據庫訪問對象時使用單例類。我可以在應用程序中的任何位置獲得對象的實例。

我通常遠離靜態類,這是加載特定資產時偶爾的加載器類的例外。