單例(singleton)模式的定義:指乙個類只有乙個例項,且該類能自行建立這個例項的一種模式。例如,windows 中只能開啟乙個任務管理器,這樣可以避免因開啟多個任務管理器視窗而造成記憶體資源的浪費,或出現各個視窗顯示內容的不一致等錯誤。
在計算機系統中,還有 windows 的**站、作業系統中的檔案系統、多執行緒中的執行緒池、顯示卡的驅動程式物件、印表機的後台處理服務、應用程式的日誌物件、資料庫的連線池、**的計數器、web 應用的配置物件、應用程式中的對話方塊、系統中的快取等常常被設計成單例。
單例模式有 3 個特點:
單例類只有乙個例項物件;
該單例物件必須由單例類自行建立;
單例類對外提供乙個訪問該單例的全域性訪問點;
單例模式的結構與實現
單例模式是設計模式中最簡單的模式之一。通常,普通類的建構函式是公有的,外部類可以通過「new 建構函式()」來生成多個例項。但是,如果將類的建構函式設為私有的,外部類就無法呼叫該建構函式,也就無法生成多個例項。這時該類自身必須定義乙個靜態私有例項,並向外提供乙個靜態的公有函式用於建立或獲取該靜態私有例項。
下面來分析其基本結構和實現方法。
1. 單例模式的結構
單例模式的主要角色如下。
單例類:包含乙個例項且能自行建立這個例項的類。
訪問類:使用單例的類。
2. 單例模式的實現
singleton 模式通常有兩種實現形式。
第 1 種:懶漢式單例
該模式的特點是類載入時沒有生成單例,只有當第一次呼叫 getlnstance 方法時才去建立這個單例。**如下:
public class lazysingleton
//private 避免類在外部被例項化
public static synchronized lazysingleton getinstance()
return instance;}}
第 2 種:餓漢式單例
該模式的特點是類一旦載入就建立乙個單例,保證在呼叫 getinstance 方法之前單例已經存在了。
public class hungrysingleton
public static hungrysingleton getinstance()
}單例模式的應用場景
前面分析了單例模式的結構與特點,以下是它通常適用的場景的特點。
在應用場景中,某類只要求生成乙個物件的時候,如乙個班中的班長、每個人的身份證號等。
當物件需要被共享的場合。由於單例模式只允許建立乙個物件,共享該物件可以節省記憶體,並加快物件訪問速度。如 web 中的配置物件、資料庫的連線池等。
當某類需要頻繁例項化,而建立的物件又頻繁被銷毀的時候,如多執行緒的執行緒池、網路連線池等。
專案中使用:
public class threadconfig
}private static threadconfig instance;
public static threadconfig getinstance()
return instance;
}public void executetask(runnable runnable)
}
呼叫:
final countdownlatch count = new countdownlatch(map.size());
for (map.entry> entry : map.entryset()) catch (exception e)
}});
count.await();
執行緒安全的懶載入:
public class cbconfig }}
return cbconfig;
}//私有化構造方法,確保不會在其他地方產生新的物件
private cbconfig(int threadsize));
}public void executetask() throws exception
設計模式之 單例設計模式
單例設計模式 單例設計模式概述 單例模式就是要確保類在記憶體中只有乙個物件,該例項必須自動建立,並且對外提供。優點 在系統記憶體中只存在乙個物件,因此可以節約系統資源,對於一些需要頻繁建立和銷毀的物件單例模式無疑可以提高系統的效能。缺點 沒有抽象層,因此擴充套件很難。職責過重,在一定程式上違背了單一...
設計模式之單例設計模式
singleton 保證乙個類只有乙個例項,並提供訪問它的全域性訪問點 類初始化時,立即載入這個物件 沒有延時載入的優勢 載入類時,天然的是執行緒安全的!private static singletondemo1 instance new singletondemo1 private singlet...
設計模式之單例設計模式
目錄 1.到底什麼是設計模式?2.什麼是單例設計模式?3.單列設計模式的兩種實現方式 餓漢式懶漢式 執行緒不安全 4.執行緒安全的寫法 餓漢式懶漢式 執行緒安全 設計模式可以理解為別人成功的故事,通用的套路,前人的經驗,設計模式是一種思想,沒有具體的實現。打乙個比方 世界上只有乙個太陽,乙個月亮,單...