天天看點

java單例跟靜态類_單例和靜态類差別

1>什麼時候使用靜态類代替singleton :

這裡有幾個很好的靜态類比singleton更好的應用場景. 最基本的例子就是在Java中的java.lang.Math類的實作方式, Math類就是用過靜态方法來實作的,而不是單例來實作的.

總結 :

如果你的singleton不提維持任何狀态, 僅僅是提供全局的通路 , 這個時候就适合用靜态類 , 這樣速度也更快, 因為static bind在編譯期間(compile during) . 記住不經意維持子類的狀态 , 尤其是在并發的情況下, 多個線程并發修改,這容易導緻不容易發現的race condition.

靜态類适用于一些工具類 , 其他的如單個通路資源就可以用singleton.

2>靜态類和singleton之間的差別 :

① static類有更好的通路效率(Static class provides better performance than Singleton pattern, because static methods are bonded on compile time)

③ singleton比static class更容易測試. 那個容易模拟(mock), 哪個就容易測試. singleton很容易用JUnit測試, 因為你能夠傳遞mock對象, 當singleton需要的時候(作為方法參數或者構造函數參數),

④ 如果你的需求是維護(maintain)狀态, 那麼singleton比static class更好 , 如果使用static class會出現一些問題.

⑤ singleton支援延遲加載 , 而static class 則不支援這樣的特性 , 在重量級的對象, 延遲加載就顯得非常重要.

⑥ 在一些依賴注入(Dependency injection framework)的架構 , 它能夠很好的管理singleton對象 . 例如Spring.

3>singleton相對于靜态類的一些進階特點 :

singleton 對于static class 主要的優點是更加面向對象 . 對于singleton你可以使用繼承(Inheritance)和多态(polymorphism)來繼承一個基類, 實作一個接口, 提供不同功能 的實作. 例如 , Java中java.lang.Runtime ,該類就是一個singleton的, 調用getRuntime(),基于不同的JVM ,傳回不同的實作對象, 針對一個一個JVM,確定隻有一個Runtime對象 , 如果使用static class就不能很好的來實作這樣的功能了 .

轉載自:https://www.cnblogs.com/guozhen/p/5164374.html

1>什麼時候使用靜态類代替singleton :

這裡有幾個很好的靜态類比singleton更好的應用場景. 最基本的例子就是在Java中的java.lang.Math類的實作方式, Math類就是用過靜态方法來實作的,而不是單例來實作的.

總結 :

如果你的singleton不提維持任何狀态, 僅僅是提供全局的通路 , 這個時候就适合用靜态類 , 這樣速度也更快, 因為static bind在編譯期間(compile during) . 記住不經意維持子類的狀态 , 尤其是在并發的情況下, 多個線程并發修改,這容易導緻不容易發現的race condition 關于race condition .

靜态類适用于一些工具類 , 其他的如單個通路資源就可以用singleton.

2>靜态類和singleton之間的差別 :

① static類有更好的通路效率(Static class provides better performance than Singleton pattern, because static methods are bonded on compile time)

③ singleton比static class更容易測試. 那個容易模拟(mock), 哪個就容易測試. singleton很容易用JUnit測試, 因為你能夠傳遞mock對象, 當singleton需要的時候(作為方法參數或者構造函數參數),

④ 如果你的需求是維護(maintain)狀态, 那麼singleton比static class更好 , 如果使用static class會出現一些問題.

⑤ singleton支援延遲加載 , 而static class 則不支援這樣的特性 , 在重量級的對象, 延遲加載就顯得非常重要.

⑥ 在一些依賴注入(Dependency injection framework)的架構 , 它能夠很好的管理singleton對象 . 例如Spring.

3>singleton相對于靜态類的一些進階特點 :

singleton 對于static class 主要的優點是更加面向對象 . 對于singleton你可以使用繼承(Inheritance)和多态(polymorphism)來繼承一個基類, 實作一個接口, 提供不同功能 的實作. 例如 , Java中java.lang.Runtime ,該類就是一個singleton的, 調用getRuntime(),基于不同的JVM ,傳回不同的實作對象, 針對一個一個JVM,確定隻有一個Runtime對象 , 如果使用static class就不能很好的來實作這樣的功能了 .