單例模式是一種最常見的設(shè)計(jì)模式。
使用場景:確保某個(gè)類有且只有一個(gè)對象的場景。
實(shí)現(xiàn)單例模式的幾個(gè)關(guān)鍵點(diǎn):
1、構(gòu)造函數(shù)不對外開放,私有構(gòu)造方法。
2、通過類方法或枚舉返回單例對象;
3、確保單例對象有且只有一個(gè),尤其在多線程的環(huán)境下;
4、確保單例對象在反序列化時(shí)不會重新構(gòu)建對象;
由于單例模式很常見,網(wǎng)上都能找到各種寫法,本文只總結(jié),不在給出具體的代碼,后面又連接供參考。
Java單例模式的幾種寫法:
1、餓漢式
2、餓漢式(靜態(tài)代碼塊)
3、懶漢式(線程不安全)
4、懶漢式 (線程安全)
5、雙重校驗(yàn)鎖 (懶漢式 線程安全變種)
6、靜態(tài)內(nèi)部類
7、枚舉
8、使用容器實(shí)現(xiàn)單例
注意:1、餓漢式和靜態(tài)內(nèi)部類的實(shí)現(xiàn)方式區(qū)別和使用場景。
2、如何避免反序列化 readResolve();
Objective-C單例模式的幾種寫法:
1、不使用GCD
2、使用GCD
注意:1、線程安全
2、避免alloc 和 copy
當(dāng)我們調(diào)用alloc函數(shù)時(shí)我們進(jìn)一步會調(diào)用allocWithZone方法
3、MRC 下的引用計(jì)數(shù)和子類化 NSAllocateObject([self class],0,NULL);
參考:
Java實(shí)現(xiàn)代碼
1、http://www.cnblogs.com/itliuchao/p/4497778.html
2、http://blog.csdn.net/u012507894/article/details/50541108
OC實(shí)現(xiàn)代碼
3、http://www.itdecent.cn/p/6b012ebc10fe
4、http://www.itdecent.cn/p/4f49c5c81021