前言
接下來(lái)這幾篇文章主要是記錄下單例設(shè)計(jì)模式的定義够吩、單例設(shè)計(jì)模式的常用寫(xiě)法、及使用場(chǎng)景——強(qiáng)大的Activity的管理丈氓。將分為以下3篇文章來(lái)記錄周循。
單例設(shè)計(jì)模式(一) - 定義、volatile關(guān)鍵字好處
單例設(shè)計(jì)模式(二) - 常見(jiàn)幾種寫(xiě)法
單例設(shè)計(jì)模式(三) - 強(qiáng)大的Activity的管理
1. 設(shè)計(jì)模式定義万俗?
是一套被反復(fù)使用湾笛、多數(shù)人知曉的、經(jīng)過(guò)分類的闰歪、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)嚎研。
說(shuō)白了,就是一些開(kāi)發(fā)的套路库倘,用于解決某一些特定場(chǎng)景的思想临扮;
2. AOP思想?
AOP教翩,面向切面杆勇,不是代碼,它是一種思想饱亿,把通用的部分代碼統(tǒng)一的管理蚜退,可以使用動(dòng)態(tài)代理、也可以使用aspectJ路捧;
3. OOP思想关霸?
OOP就是面向?qū)ο螅瑒e人說(shuō)面向?qū)ο竽阒澜苌ǎf(shuō)OOP你也需要知道队寇,OOP就是面向?qū)ο螅?/p>
3. 單例設(shè)計(jì)模式?
保證整個(gè)程序中只有一個(gè)實(shí)例對(duì)象章姓,使用場(chǎng)景就是一些特殊的類佳遣,比如:老板识埋、管理層、管理的類(比如Activity的管理零渐、皮膚的管理)窒舟;
特殊情況,有時(shí)候可以寫(xiě)一個(gè) XXXUtils工具類诵盼,讓其只有一個(gè)實(shí)例惠豺,也是可以的;
套路:
0>:私有的风宁、靜態(tài)的洁墙、volitale、mInstance對(duì)象戒财;
1>:私有的構(gòu)造方法热监,防止別人去new 對(duì)象;
2>:共有的饮寞、靜態(tài)的孝扛、getInstance(),讓外部調(diào)用幽崩;
4. volatile關(guān)鍵字好處苦始?
1>:防止重新排序:
如下圖所示:
一般都是第一種的1、2歉铝、3盈简,也就是說(shuō)先開(kāi)辟內(nèi)存凑耻,然后初始化對(duì)象太示,最后賦值給mInstance,如果不加volatile關(guān)鍵字的話香浩,可能會(huì)出現(xiàn)第二種的1类缤、2、3邻吭;
加volatile目的就是:不要出現(xiàn)第二種情況的1餐弱、2、3囱晴;
2>:線程可見(jiàn)性:
某一個(gè)線程修改了公用對(duì)象(變量)膏蚓,短時(shí)間內(nèi)另一個(gè)線程可能是不可見(jiàn)的,因?yàn)槊恳粋€(gè)線程都有自己的緩存區(qū)(線程工作區(qū))
加volatile目的就是:讓每一個(gè)線程都變得可見(jiàn)畸写;
代碼已上傳至github:
https://github.com/shuai999/Architect_day8.git