鍍金池/ 教程/ Java/ 確保對象的唯一性——單例模式(五)
工廠三兄弟之抽象工廠模式(五)
復(fù)雜對象的組裝與創(chuàng)建——建造者模式(一)
工廠三兄弟之工廠方法模式(一)
復(fù)雜對象的組裝與創(chuàng)建——建造者模式(二)
確保對象的唯一性——單例模式 (二)
工廠三兄弟之簡單工廠模式(四)
確保對象的唯一性——單例模式 (一)
工廠三兄弟之工廠方法模式(四)
對象的克隆——原型模式(一)
工廠三兄弟之抽象工廠模式(二)
工廠三兄弟之工廠方法模式(三)
工廠三兄弟之抽象工廠模式(一)
工廠三兄弟之抽象工廠模式(四)
確保對象的唯一性——單例模式 (三)
工廠三兄弟之簡單工廠模式(三)
對象的克隆——原型模式(二)
復(fù)雜對象的組裝與創(chuàng)建——建造者模式(三)
對象的克隆——原型模式(四)
確保對象的唯一性——單例模式(四)
工廠三兄弟之簡單工廠模式(一)
工廠三兄弟之簡單工廠模式(二)
對象的克隆——原型模式(三)
工廠三兄弟之抽象工廠模式(三)
確保對象的唯一性——單例模式(五)
工廠三兄弟之工廠方法模式(二)

確保對象的唯一性——單例模式(五)

單例模式總結(jié)

單例模式作為一種目標(biāo)明確、結(jié)構(gòu)簡單、理解容易的設(shè)計(jì)模式,在軟件開發(fā)中使用頻率相當(dāng)高,在很多應(yīng)用軟件和框架中都得以廣泛應(yīng)用。

主要優(yōu)點(diǎn)

單例模式的主要優(yōu)點(diǎn)如下:

(1) 單例模式提供了對唯一實(shí)例的受控訪問。因?yàn)閱卫惙庋b了它的唯一實(shí)例,所以它可以嚴(yán)格控制客戶怎樣以及何時(shí)訪問它。

(2) 由于在系統(tǒng)內(nèi)存中只存在一個(gè)對象,因此可以節(jié)約系統(tǒng)資源,對于一些需要頻繁創(chuàng)建和銷毀的對象單例模式無疑可以提高系統(tǒng)的性能。

(3) 允許可變數(shù)目的實(shí)例?;趩卫J轿覀兛梢赃M(jìn)行擴(kuò)展,使用與單例控制相似的方法來獲得指定個(gè)數(shù)的對象實(shí)例,既節(jié)省系統(tǒng)資源,又解決了單例單例對象共享過多有損性能的問題。

主要缺點(diǎn)

單例模式的主要缺點(diǎn)如下:

(1) 由于單例模式中沒有抽象層,因此單例類的擴(kuò)展有很大的困難。

(2) 單例類的職責(zé)過重,在一定程度上違背了“單一職責(zé)原則”。因?yàn)閱卫惣瘸洚?dāng)了工廠角色,提供了工廠方法,同時(shí)又充當(dāng)了產(chǎn)品角色,包含一些業(yè)務(wù)方法,將產(chǎn)品的創(chuàng)建和產(chǎn)品的本身的功能融合到一起。

(3) 現(xiàn)在很多面向?qū)ο笳Z言(如 Java、C#)的運(yùn)行環(huán)境都提供了自動垃圾回收的技術(shù),因此,如果實(shí)例化的共享對象長時(shí)間不被利用,系統(tǒng)會認(rèn)為它是垃圾,會自動銷毀并回收資源,下次利用時(shí)又將重新實(shí)例化,這將導(dǎo)致共享的單例對象狀態(tài)的丟失。

適用場景

在以下情況下可以考慮使用單例模式:

(1) 系統(tǒng)只需要一個(gè)實(shí)例對象,如系統(tǒng)要求提供一個(gè)唯一的序列號生成器或資源管理器,或者需要考慮資源消耗太大而只允許創(chuàng)建一個(gè)對象。

(2) 客戶調(diào)用類的單個(gè)實(shí)例只允許使用一個(gè)公共訪問點(diǎn),除了該公共訪問點(diǎn),不能通過其他途徑訪問該實(shí)例。

思考

如何對單例模式進(jìn)行改造,使得系統(tǒng)中某個(gè)類的對象可以存在有限多個(gè),例如兩例或三例?【注:改造之后的類可稱之為多例類?!?/p>