1、核心:
保證乙個類只有乙個例項,並且提供乙個訪問該例項的全域性訪問點。
2、單例模式的優點:
1)由於單例模式只生成乙個例項物件,減少了系統的效能開銷。當乙個物件的產生需要比較多的資源時,如讀取配置、產生其他依賴物件時,則可以通過在應用啟動時直接產生乙個單例物件,然後永久駐留記憶體的方式來解決
2)單例模式可以在系統設定全域性的訪問點,優化共享資源的訪問,例如可以設計乙個單例類,負責所有資料表的對映處理
1、餓漢式(執行緒安全,呼叫效率高。但是,不能延時載入。)
/*
* 測試單例模式
* * 餓漢模式
*/public
class
singletondemo1
//方法沒有同步,呼叫效率高
public
static singletondemo1 getinstance()
}
2、懶漢式(執行緒安全,呼叫效率不高。但是,可以延時載入。)/*
* 測試單例模式
* * 懶漢模式
*/public
class
singletondemo2
//方法同步,呼叫效率低
public
static
synchronized singletondemo2 getinstance()
return instance;
}}
3、雙重檢測鎖式(由於jvm底層內部模型原因,偶爾會出現問題。不建議使用)/*
* 測試單例模式
* * 雙重檢測鎖模式
*/public
class
singletondemo3
public
static singletondemo3 newinstance()
}}return singletondemo3;
}}
4、靜態內部類式(執行緒安全,呼叫效率高。但是,可以延時載入)/*
* 測試單例模式
* * 靜態內部類模式
*/public
class
singletondemo4
private
singletondemo4()
public
static singletondemo4 getinstance()
}
5、列舉單例(執行緒安全,呼叫效率高,不能延時載入)/*
* 測試單例模式
* * 列舉單例模式
*/public
enum singletondemo5
}
如何選擇?
1·、單例物件 占用 資源少,不需要延時載入:
列舉式 好於 餓漢式
2、單例物件 占用 資源大,需要延時載入:
靜態內部類式 好於 懶漢式
1、windows的taskmanager(任務管理器)就是很典型的單例模式。
2、**的計數器,一般都是採用單例模式實現,否則難以同步。
3、專案中,讀取配置檔案的類,一般也只有乙個物件。沒有必要每次使用配置檔案資料,每次都new乙個物件去讀取。
4、應用程式的日誌系統,一般也是採用單例模式實現,這一般是由於共享的日誌檔案一直處於開啟狀態,因為只能有乙個例項去操作,否則內容不好追加。
5、資料庫的連線池設計一般也是採用單例模式,因為資料庫連線是一種資料庫資源。
6、作業系統的檔案系統,也是大的單例模式實現的具體例子,乙個作業系統只能有乙個檔案系統。
8、在spring中,每個bean預設就是單例的,這樣做的優點是spring容器可以管理。
9、在servlet程式設計中,每個servlet也是單例。
10、在springmvc框架/structs1框架中,控制器物件也是單例。
設計模式 單例模式
單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...
設計模式 單例模式
class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...
設計模式 單例模式
單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...