單例設計模式

一、概述
1.目的:保證一個類在內存中的對象只有一個。
2.思想:
(1)不讓其他程序創建該類對象;
(2)在本類中創建一個本類對象;
(3)對外提供方法,讓其他程序獲取這個對象。
3.代碼體現: 
(1)私有化構造函數; 
(2)創建私有並靜態的本類對象; 
(3)定義公有並靜態的方法,返回該對象。
二、餓漢式
class Single{
private Single(){} //私有化構造函數。
private static Single s=new Single(); //創建私有並靜態的本類對象。
public static Single getInstance(){ //定義公有並靜態的方法,返回該對象。
return s;
}
}
三、懶漢式(也叫做對象的延時加載)
class Single{
private Single(){}
private static Single s=null;
public static Single getInstance(){
if(s==null)
s=new Single();
return s;
}
}
當多個線程訪問該類時,有可能會產生多個對象。對於這種情況有以下兩種種解決方案。
第一種解決方案:同步方法
public static synchronized Single getInstance(){
if(s==null)
s=new Single();
return s;
}
getInstance()方法前面加上synchronized關鍵字,但每次調用此方法都會對其進行判斷,效率較低;
第二種解決方案:同步代碼塊
public static synchronized Single getInstance()
{
if(s==null)
{
synchronized(Single.class)
{
if(s==null)
s=new Single();
}
}
return s;
}
有了對象之後就不會再判斷鎖,所以效率不會較低。
定義單例時建議使用餓漢式。
發佈了42 篇原創文章 · 獲贊 23 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章