Singleton
模式分類
從目的來看:
創(chuàng)建型:負(fù)責(zé)對象創(chuàng)建
結(jié)構(gòu)型:處理類與對象間的組合
行為型:類與對象交互中的職責(zé)分配。
從范圍來看:
類模式處理類與子類的靜態(tài)關(guān)系。
對象模式處理對象間的動(dòng)態(tài)關(guān)系。
動(dòng)機(jī)
在軟件系統(tǒng)中,經(jīng)常有這樣一些特殊的類,必須保證他們在系統(tǒng)中只存在一個(gè)實(shí)例,才能確保他們的邏輯
正確性,以及良好的效率。
如何繞過常規(guī)的構(gòu)造器,提供一種機(jī)制來保證一個(gè)類只有一個(gè)實(shí)例?
這應(yīng)該是類設(shè)計(jì)者的責(zé)任,而不是使用者的責(zé)任。
這應(yīng)該是類設(shè)計(jì)者的責(zé)任,而不是使用者的責(zé)任。
意圖
保證一個(gè)類僅有一個(gè)實(shí)例。
單線程Singleton末是的幾個(gè)要點(diǎn):
構(gòu)造器可以設(shè)置為protected以允許字類派生。
singleton模式一般不要支持Cloneable接口,因?yàn)檫@可能會(huì)導(dǎo)致多個(gè)對象實(shí)例,與Singleton末是的初衷
違背。
Singleton模式一般不要支持序列化,因?yàn)檫@也有可能導(dǎo)致多個(gè)對象實(shí)例,同樣與Singleton末是的初衷違
背。
Singleton模式只考慮了對象創(chuàng)建的管理,沒有考慮對象銷毀的管理。就支持垃圾回收的平臺(tái)和對象開銷
來講,我們一般沒有必要對其銷毀進(jìn)行特殊的管理。
不能應(yīng)對多線程環(huán)境:再多線程環(huán)境下,使用Singleton模式仍然有可能得到Singleton類的多個(gè)實(shí)例對象
。
模式擴(kuò)展:
將一個(gè)實(shí)例擴(kuò)展到n個(gè)實(shí)例,例如對象池的實(shí)現(xiàn)。
將new構(gòu)造器的調(diào)用轉(zhuǎn)移到其他類中,例如多個(gè)類協(xié)同工作環(huán)境中,某個(gè)局部環(huán)境只需要擁有某個(gè)類的一
個(gè)實(shí)例。
理解和擴(kuò)展Singleton模式的核心是“如何控制用戶使用new對一個(gè)類的實(shí)例構(gòu)造器的任意調(diào)用”
轉(zhuǎn)載于:https://www.cnblogs.com/tongzhiyong/archive/2008/03/31/1131871.html
總結(jié)
- 上一篇: ABAP OO的八大理由(四)
- 下一篇: 1028. List Sorting (