設計模式 單例

2021-08-08 06:54:02 字數 1545 閱讀 6145

單例:保證乙個物件永遠只能有乙個例項存在

應用:—資料庫連線池的設計一般也是採用單例模式,因為資料庫連線是一種資料庫資源。資料庫軟體系統中使用資料庫連線池,主要是節省開啟或者關閉資料庫連線所引起的效率損耗,這種效率上的損耗還是非常昂貴的,因為何用單例模式來維護,就可以大大降低這種損耗

—多執行緒的執行緒池的設計一般也是採用單例模式,這是由於執行緒池要方便對池中的執行緒進行控制。

—web應用的配置物件的讀取,一般也應用單例模式,這個是由於配置檔案是共享的資源。

—應用程式的日誌應用,一般都何用單例模式實現,這一般是由於共享的日誌檔案一直處於開啟狀態,因為只能有乙個例項去操作,否則內容不好追加。

單例的實現方法:私有的靜態例項物件,私有的建構函式,提供公開的靜態方法來獲取私有的靜態例項物件

在類載入的時候,就建立的物件。能夠保證永遠都只有乙個例項,但是會占用記憶體,但由於現在硬體**降低,占用這點記憶體沒啥事兒。

public class singleton

public static singleton  getintance()

方法訪問的時候才建立物件。單執行緒沒有問題,但多執行緒情況下,不能保證永遠只產生乙個物件

private static lazysingleton instance;

private lazysingleton()

/** 懶漢模式:單執行緒沒有問題,但是多執行緒的時候,不能保證永遠只有乙個例項

*/public static lazysingleton getinstance()

return instance;}/*

* 對方法加鎖會造成非常嚴重的效能影響

*/public static synchronized lazysingleton  getinstance()

return instance;

}/**

*  在判斷null後加鎖把例項化**鎖住。看似解決了多執行緒問題。其實不然 :

* 設現有執行緒a和b,在t1時刻執行緒a和b均已通過判空語句但都未取得鎖資源;

* t2時刻時,a先取得鎖資源進入臨界區(被鎖的**塊),執行new操作建立例項物件,然後退出臨界區,釋放鎖資源。

* t3時刻,b取得被a釋放的鎖資源進入臨界區,執行new操作建立例項物件,然後退出臨界區,釋放鎖資源。

* 明顯地,singleton被例項化兩次。這樣寫也不能保證執行緒安全。

public static lazysingleton  getinstance2()

}return instance;}}

能夠保證永遠只產生乙個例項

public class staticinnersingleton

public static final staticinnersingleton getinstance()

private static final class singletionholder

}---------------

public class maintest

};for(int i = 1; i<1000;i++) }}

一般使用餓漢模式,靜態內部類。

單例設計模式(餓漢單例設計模式 懶漢單例設計模式)

1.什麼是單例 單例的意思是乙個類永遠只存在乙個物件,不能建立多個物件。2.為什麼要用單例 開發中有很多的物件我們只需要乙個,例如虛擬機器物件,任務管理器物件 物件越多越佔記憶體,有時候只需要乙個物件就可以實現業務,單例可以節省記憶體空間。3.如何實現單例 單例的實現方式有 餓漢單例設計模式 通過類...

設計模式 單例設計模式

歷史 最早是建築學領域的模式,然後gof四人由其引申到編碼方面,總結了23種設計模式 設計模式 解決某一類事情最行之有效的方法 2.1 體現 餓漢式,保證物件的唯一性 class singleton 私有化建構函式禁止該類建立物件 private static singleton st new si...

設計模式 單例設計模式

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項 單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。單例設計模式 解決的問題 可以保...