昨日,從新溫習了一下工廠模式和單例模式。設計模式
而且從新認識了設計模式,在學校期間接觸過設計模式。學習
可是,在那個時期,學設計模式只是單純的學習理論知識而已。spa
ps:順便吐槽一下,上學期間學習的東西,大多數的狀況會在將來的某個時間點徹底遺忘掉。設計
最根本的緣由在於,那個時期說學習的東西更偏重與理論,理論這種東西,只是潛移默化的告訴你「我知道這個」。code
可是,當你真正開始用這個東西的時候發現無從下手。這也就形成了大學生找工做眼高手低的現象。對象
(以上純屬我的觀點)blog
-------------------------------------------------回到正題-------------------------------------------------------------get
先講一下單例模式的我的理解:同步
單例模式,顧名思義,就是在一個運行機制(應用程序)中,一個class類只有一個實例的存在。class
下面以小華的故事做爲主線,講一下單利模式的三種實現,若是理解有誤,歡迎指出。
在小華初中的時候電腦尚未那麼普及,小華很是想玩電腦(去QQ農場偷個菜什麼的(●'◡'●)),
剛好,鄰居大土豪給兒子買了一臺,因而乎小華就去了~~~可是,小華髮現有好多人都和小華同樣在等着玩電腦。
小土豪說:大家先等我玩完了!在去決定誰來玩。
基於這種思考,就開始實現講關於小華的故事--單例模式:
小華的故事一、
開始時,小華的鄰居大土豪買了一臺電腦:
private static Singleton instance = new Singleton();
小土豪說這是個人電腦:
private Singleton(){ }
小土豪玩累了,讓給下一我的來玩:
private static Singleton getInstance(){ return instance; }
那個時候電腦就是精神的糧食,而你們很是須要這種糧食,能夠說是很是餓。
因此,上面說實現的這種單例模式成爲「餓漢模式」。
小華的故事二、
後來,小華認識了一個豪友,豪友也有電腦:
private Singleton(){
}
豪友早就玩膩了電腦,電腦就放在那裏也不開機,
private static Singleton instance;
可是,對於小華來講怎麼能讓電腦就這麼放着浪費呢?!
豪~電腦可玩乎~~~,豪友很大方---隨便玩!
public static Singleton getInstance(){ if(instance == null){ return instance = new Singleton(); }else{ return instance; } }
有個豪友是多麼重要啊!
不用像餓漢同樣,每天等着小土豪玩完再玩。能夠很慵懶的想玩就玩。因此,這種慵懶的生活就叫作「懶漢模式」。
小華的故事三、
好景不長,豪友的表弟暑假要在豪友家住,擺明了就是爲了玩電腦去的。
電腦仍是豪友的電腦:
private Singleton(){ }
豪友通常仍是不怎麼玩,電腦一如既往的閒着:
private static Singleton instance;
可是,小華卻有了顧及。先要看電腦有沒有人再用。
難免會發生這樣一種狀況,小華打開電腦的同時,豪友的表弟也進來要玩電腦。
豪友也是夠仗義,告訴表弟電腦鎖上了密碼忘了,你先出去玩去吧!等電腦好了再叫你。
public static Singleton getSingle(){ //外部經過此方法能夠獲取對象 if(single == null){ synchronized (Singleton.class) { //保證了同一時間只能只能有一個對象訪問此同步塊 if(single == null){ single = new Singleton(); } } } return single; //返回建立好的對象 }
這樣,豪友騙表弟電腦鎖住了,就是所謂的「雙重鎖模式」。
這就是小華的故事--單例模式。