Java 單例模式——漂亮學姐要我電話號碼幹什麼?這麼關心我難道她想.
小故事引入(保證以後你會追我的文章)
哇!大學開學第一天,我的高中學習沒有白努力,沒有荒廢時光,我考到了一所很好的大學 —— 丞緒源大學!剛入學第一天,走進學校,大家都在忙著自己的事情,席不瑕暖。
我剛進學校,不知道幹什麼,忽然,一位穿一身翠綠衣衫,皮膚雪白,一張臉蛋清秀可愛的學姐走到我面前,她說:“這位弟弟,我可以幫到你什麼?”,我一直呆呆地看著,心裡打量著她,心想 “好生漂亮的女子,千秋無絕色!悅目是佳人!傾國傾城貌!驚為天下人!”。
“這位弟弟,你在想什麼呢?”,她朝我揮揮手,讓我好尷尬,臉紅心跳地答道,“我找宿舍和教學樓,請問在哪兒呢?”,說罷,她直接牽著我的手走去,我頓時不知所措,因為我連女孩子的手都沒碰過!“吶!這裡就是宿舍了,我不方便上去,我在下面等你,為了表達你對我的謝意,就把電話號碼給我吧!”,我便把電話號碼給她了,心裡那叫一個爽。
“我看你準備的東西也不齊全,連被子都沒有,估計飯卡也沒有辦吧,晚上我帶你去吃飯吧,吃完晚飯我帶你去找學校外面的酒店,將就一晚上吧!”,漂亮的學姐說道…
下一篇接著講故事:
學姐的單例模式
使用單例模式的本意是 保證類在記憶體中只能有一個物件 ,單例模式有兩種,一個是餓漢式,一個是懶漢式!
假設學校給學姐分配任務:幫助學弟解決問題!
學姐的餓漢式單例模式
建立一個漂亮學姐(姐姐)類:
/**
* @author 程憶難 https://myhub.blog.csdn.net
* 餓漢式
*/
public class BeautifulSister {
/**
* 建立例項,並且是私有的
*/
private static final BeautifulSister beautifulSister = new BeautifulSister();
/**
* 私有構造
*/
private BeautifulSister() {
}
/**
* 提供 public get方法,供外部使用
*
* @return
*/
public static BeautifulSister getBeautifulSister() {
return beautifulSister;
}
}
此時,如果你要呼叫的話,只能直接用類名呼叫getBeautifulSister()方法,才能獲得這位漂亮學姐,你別再想new她,new急了她給你報錯!也就是這樣,保證類在記憶體中只能有這一個漂亮學姐!這就好比在 丞緒源大學(記憶體) 中,只有這一位漂亮學姐(BeautifulSister類)!
餓漢式是以空間換時間的方式,這就好比在這所大學,已經給定了這位學姐,她要幫助她的學弟,也就是我,這是已經給定的,直接全載入出來!
學姐的懶漢式單例模式
建立一個漂亮學姐(姐姐)類:
/**
* @author 程憶難 https://myhub.blog.csdn.net
* 餓漢式
*/
public class BeautifulSister {
/**
* 建立例項,並且是私有的
*/
private static BeautifulSister beautifulSister = null;
/**
* 私有構造
*/
private BeautifulSister() {
}
/**
* 提供 public get方法,供外部使用
*
* @return
*/
public static BeautifulSister getBeautifulSister() {
if (null == beautifulSister) {
beautifulSister = new BeautifulSister();
}
return beautifulSister;
}
}
懶漢式,只有當呼叫getBeautifulSister() 方法時,才會建立這位漂亮學姐,故事中提到“她直接牽著我的手走去,我頓時不知所措”,這也是在簡單瞭解之後,知道了我要幹什麼,有什麼疑問後,才拉我的手,總不能上來什麼話也沒說,直接就拉我的手,要我的電話號碼!
那麼如何保證懶漢式單例模式執行緒安全呢,意思就是保證這個學姐不受其他人的干擾,專心為我找宿舍和教學樓,要電話號碼!總不能,同時服務兩個學弟!這就構成了3P,線上程中是不安全的!那麼,就要用到雙重加鎖來解決這一問題!
現在來對獲取這位學姐進行雙重檢查加鎖!
/**
* @author 程憶難 https://myhub.blog.csdn.net
* 餓漢式
*/
public class BeautifulSister {
/**
* 建立例項,並且是私有的
*/
private static BeautifulSister beautifulSister = null;
/**
* 私有構造
*/
private BeautifulSister() {
}
/**
* 提供 public get方法,供外部使用
* 雙重檢查
*
* @return
*/
public static BeautifulSister getBeautifulSister() {
if (null == beautifulSister) {
synchronized (BeautifulSister.class) {
if (null == beautifulSister) {
beautifulSister = new BeautifulSister();
}
}
}
return beautifulSister;
}
}
這樣就保證了這位學姐先專心致志為我服務!避免了爭風吃醋!
漂亮學姐的傻白甜總結
- 單例模式保證了系統記憶體中該類只存在一個物件,節省了系統資源,對於一些需要頻繁建立銷燬的物件,使用單例模式可以提高系統效能!
- 單例模式,採用了私有化構造方法,不可以new學姐(物件),只能用類名呼叫 get() 方法!
- 單例模式可以用於頻繁地銷燬、創造物件或者建立物件消耗資源過多時候使用!
本篇文章所提及大學名子為本人自擬,如有雷同,純屬巧合!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4550/viewspace-2825123/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 翻譯:WebAssembly簡介:我們為什麼要關心這個技術? Web
- 我為什麼要關心區塊鏈?概述和接納區塊鏈
- Koala Framework是什麼?我為什麼要寫這個框架?Framework框架
- 我們為什麼要學Java?Java好在哪?Java
- 我的Java設計模式-單例模式Java設計模式單例
- 為什麼我要垂直對齊程式碼
- 我做的網頁為什麼不漂亮?網頁
- 當我們擔心人工智慧時,我們擔心什麼?人工智慧
- 我們為什麼要閱讀webpack原始碼Web原始碼
- 為什麼我們要學習DMAIC?—舉例說明AI
- 為什麼我要學習“機器學習”?機器學習
- 我為什麼要學技術
- 我的會話(session)在做什麼?會話Session
- 我的會話session在做什麼?會話Session
- 我為什麼使用 JavaJava
- 面試官寫了個雙冒號::問我是什麼語法,Java中有這玩意麼?面試Java
- 為什麼我要豎向對齊程式程式碼
- 我們的口號是什麼?
- 我們程式設計師為什麼要關注 JavaScript ?程式設計師JavaScript
- 為什麼要用單例模式?單例模式
- 為什麼我要寫自己的框架?框架
- 為什麼要這樣設計,還是我理解錯誤
- 我的會話(session)在做什麼? (轉)會話Session
- 無論什麼工作 要幹就幹出彩
- 面試官寫了個雙冒號: : 問我這是什麼語法?Java中有這玩意?面試Java
- 為什麼我會選擇走 Java 這條路?Java
- Java能幹什麼?Java
- 為什麼我喜歡JavaJava
- 面試官:素有Java鎖王稱號的‘StampedLock’你知道嗎?我:這什麼鬼?面試Java
- 為什麼我要垂直對齊程式碼(你也要如此!)
- 漫話:如何給女朋友解釋什麼是單例模式?單例模式
- 為什麼我們要熟悉這些通訊協議? 【精讀】協議
- 唉,我的人生為什麼這麼悲慘
- 我男友寫程式碼不接我電話
- 我們為什麼要技術寫作
- 為什麼我要編寫自己的UIKitUI
- 為什麼我要離開Google投奔FacebookGo
- 漫畫:什麼是單例模式?單例模式