單例設計模式:解決乙個類在記憶體只存在乙個物件。(保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點)
想要保證物件的唯一:
1.為了避免其他程式過多建立該類對類物件。先禁止其他程式建立該類物件。
2.還為了讓其他程式可以訪問到該類物件,只好在本類中,自定義乙個物件。
3.為了方便其他程式對自定義物件的訪問,可以對外提供一些訪問方式。
這三部怎**中體現?
1.將建構函式私有化。
2.在類中建立乙個本類物件。
3.提供乙個方法可以獲取到該物件。
對於事物該怎麼描述還怎麼描述。
當需要將該事物的物件保證在記憶體中唯一時,就將以上的三步加上即可。
1/**2
* 單例模式singleton
3* 應用場合:有些物件只需要乙個就足夠了.
4* 作用:保證整個應用程式中某個例項只有乙個.
5* 型別:餓漢模式.6*/
7public
class
singleton
1213
//2.建立類的唯一例項 使用private static修飾符
14private
static singleton instance = new
singleton();
1516
//3.提供乙個用於獲取例項的方法 使用public static修飾符 (物件導向的封裝性要求控制訪問,不允許其他類直接訪問本類的成員變數(私有化))
17public
static
singleton getinstance()
20 }
1/*2問:懶漢式為什麼要使用兩次 s==null 的判斷?* 物件是方法被呼叫時,才初始化,也叫做物件的延時載入。稱為:懶漢式
3* single類進記憶體,物件還沒有存在,只有呼叫getinstance方法,才建立物件。4*/
5class
single1
7private
static single1 s=null;8
/*9* 此處可以加乙個synchronized(同步),使只有乙個執行緒可以進入該方法,避免錯亂。
10* 但是每次只有乙個執行緒可以進入導致該方法效率低。
11public static synchronized single1 getinstance()
16*/
1718
/*以下方法更為高效 雙重鎖定
*/19
public
static
single1 getinstance()
25}
26return
s;27
}28 }
答:對於例項物件存在的情況,直接返回,這沒有問題。當例項物件s為null並且同時有兩個執行緒呼叫getinstance()方法時,它們將都可以通過第一重 s==null 的判斷。然後由synchronized機制,這兩個執行緒只有乙個進入,另乙個在外排隊等候,必須要其中乙個進入並出來後,另乙個才能進入。而此時如果沒有第二重的s==null ,則第乙個執行緒建立例項物件後,第二個執行緒還可以繼續建立新的例項物件,這就沒有達到單例的目的。
餓漢模式和懶漢模式的區別:
餓漢模式的特點是載入類時比較慢(因為類一載入就是例項化物件),但執行時獲取物件的速度比較快,執行緒安全
懶漢模式的特點是載入類時比較快,但執行時獲取物件的速度比較慢,(改寫後的執行緒安全)
設計模式 單例模式
單例模式 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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...