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就不能很好的來實現這樣的功能了 .