一、概念解釋
1、單例模式是指一個類只允許存在一個實例對象,且該對象能被系統中其他模塊所共用。該模式主要解決了全局變量的問題,在同一時間只有一個實例被使用,避免了多次重複實例化造成的資源浪費。
2、單例模式保證了在系統中,某一個類只有唯一的實例存在,系統性能更高。該模式在實際應用中經常被用來映射全局資源,如日誌文件、配置文件等。
3、單例模式對於某些具有強制一致性的操作,如系統日誌、應用配置等,也非常適用。
二、使用場景
1、需要頻繁實例化然後垃圾回收的對象,如工具類對象。
2、大量的共享對個數有限的資源,如數據庫連接池、線程池、操作系統的文件系統、打印機等。
3、各種工具類、配置文件類等較為內部複雜或外部資源耗費較大的類,使用單例模式可以避免頻繁地創建和銷毀對象。
三、優缺點
1、單例模式的優點:
a、在需要使用相同數據的地方可以直接使用單例得到的實例完成操作。
b、單例模式在實際應用中,常用於創建共享閱讀資源,例如配置文件、數據庫連接池等。
c、一個對象只被實例化一次,減少了系統開銷,節約了內存資源。
d、可以更好地控制數據的一致性。
2、單例模式的缺點:
a、單例模式本身是一種單一性的設計模式,因此也同時意味着它的使用條件非常苛刻。
b、單例類的擴展可能會導致單例失效,因為由於一個類只有一個實例,因此不能擴展該類來生成新的實例。
四、代碼示例
下面是一個單例模式的代碼示例:
public class Singleton { private static Singleton instance = null; private Singleton() {} public static synchronized Singleton getInstance() { if (null == instance) { instance = new Singleton(); } return instance; } }
這個代碼示例中,構造函數被聲明為 private 訪問權限的,這樣就無法在類的外部調用構造函數來創建類的實例。getInstance() 方法(因為是靜態的,所以可以直接通過類名調用)返回 Singleton 類的唯一實例。getInstance() 的實現非常簡單。在該方法中,如果 instance 為 null,即還沒有創建實例,就創建一個新的實例;如果已經創建了實例,就返回該實例。這裡需要注意的是 instance 聲明為 static 和 private 類型,一是為了訪問的方便,二是為了保證該實例在類裝載時就被創建出來,這樣就避免了多線程訪問的同步問題。
原創文章,作者:ZFKVN,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/371464.html