設(shè)計(jì)模式
1. 簡(jiǎn)介:
????1.1 設(shè)計(jì)模式(Disign pattern)是一套被反復(fù)使用专钉、多數(shù)人知曉的捺典、經(jīng)過(guò)分類編目的娇斩、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)茅主。
? ? 1.2 設(shè)計(jì)方案是軟件開(kāi)發(fā)人員在軟件開(kāi)發(fā)過(guò)程中面臨的一般問(wèn)題的解決方案部念。
2. 作用:
? ? 2.1 項(xiàng)目中合理的運(yùn)用設(shè)計(jì)模式可以完美的解決很多問(wèn)題弃酌。
????2.2 每種模式在現(xiàn)在中偶有相應(yīng)的原理來(lái)與之對(duì)應(yīng)。
????2.3 每個(gè)模式描述了一個(gè)在我們周圍不斷重復(fù)發(fā)生的問(wèn)題儡炼,以及該問(wèn)題的核心解決方案妓湘。
3. 面向?qū)ο蟮幕A(chǔ)設(shè)計(jì)模式:
4. 單例模式(Singleton)
????例子:滾滾歷史,永恒定律
--? 一個(gè)朝代只有一個(gè)皇帝
--? 軍隊(duì)的最高司令只有一個(gè)
--? 一山不容二虎
4.1 目的:
? ? 使類的一個(gè)對(duì)象成為該類系統(tǒng)中唯一的實(shí)例乌询。
4.2 定義:
? ? 一個(gè)類有且僅有一個(gè)實(shí)例榜贴,并且自行實(shí)例化向整個(gè)系統(tǒng)提供。
4.3 要點(diǎn):
? ? 4.3.1 某個(gè)類只能有一個(gè)實(shí)例
? ? 4.3.2 必須自行創(chuàng)建實(shí)例
? ? 4.3.3 必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例
4.4 優(yōu)點(diǎn):
? ? 4.41 在內(nèi)存中只有一個(gè)對(duì)象妹田,節(jié)省內(nèi)存空間唬党。
? ? 4.4.2 避免頻繁的創(chuàng)建銷毀對(duì)象鹃共,提高性能。
? ? 4.4.3 避免對(duì)共享資源的多重利用
4.5 缺點(diǎn):
? ? 4.5.1 擴(kuò)展較困難
? ? 4.5.2 如果實(shí)例化后對(duì)象長(zhǎng)期不利用驶拱,系統(tǒng)默認(rèn)為垃圾進(jìn)行回收霜浴,造成對(duì)象狀態(tài)的丟失。
4.6 適用場(chǎng)景
? ? 4.6.1 創(chuàng)建對(duì)象時(shí)占用資源過(guò)多蓝纲,同時(shí)有需要用到該類對(duì)象
????4.6.2 對(duì)系統(tǒng)內(nèi)資源要求統(tǒng)一讀寫阴孟,如讀寫配置信息
? ? 4.6.3 當(dāng)多個(gè)實(shí)例存在可能引起邏輯錯(cuò)誤,如號(hào)碼生成器
4.7 實(shí)現(xiàn):
? ? 4.7.1 只提供私有的構(gòu)造方法
? ? 4.7.2 含有一個(gè)該類的靜態(tài)私有對(duì)象
? ?4.7.3 提供一個(gè)靜態(tài)的公有方法用于創(chuàng)建税迷、獲取靜態(tài)私有對(duì)象
4.8 代碼實(shí)現(xiàn)方案:
? ? 4.8.1 餓漢式
? ? ? ? ? ? ?空間換時(shí)間
????4.8.2 懶漢式
? ? ? ? ? ? ?時(shí)間換空間
4.9 兩種方式對(duì)比:
4.9.1 餓漢式在類加載時(shí)就創(chuàng)建實(shí)例永丝,第一次加載熟讀快;懶漢式第一次使用時(shí)才進(jìn)行實(shí)例化箭养,第一次加載速度慢类溢。
4.9.2 餓漢式線程安全,懶漢式在多線程操作中有出錯(cuò)的可能露懒,存在線程風(fēng)險(xiǎn)闯冷。解決方案:同步鎖、雙重校驗(yàn)鎖懈词、內(nèi)部靜態(tài)類蛇耀、枚舉。