單例模式定義
保證一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)
若顯式的定義構(gòu)造方法,則系統(tǒng)默認(rèn)的構(gòu)造方法就會(huì)失效,讓類自身負(fù)責(zé)保存它的一個(gè)實(shí)例,這個(gè)類可以保證沒(méi)有其他實(shí)例被創(chuàng)建
模式結(jié)構(gòu)圖
優(yōu)點(diǎn):
1.在單例模式中悼瘾,活動(dòng)的單例只有一個(gè)實(shí)例梦重,對(duì)單例類的所有實(shí)例化得到的都是相同的一個(gè)實(shí)例。這樣就 防止其它對(duì)象對(duì)自己的實(shí)例化,確保所有的對(duì)象都訪問(wèn)一個(gè)實(shí)例
2.單例模式具有一定的伸縮性,類自己來(lái)控制實(shí)例化進(jìn)程,類就在改變實(shí)例化進(jìn)程上有相應(yīng)的伸縮性。
3.提供了對(duì)唯一實(shí)例的受控訪問(wèn)季研。
4.由于在系統(tǒng)內(nèi)存中只存在一個(gè)對(duì)象,因此可以 節(jié)約系統(tǒng)資源誉察,當(dāng) 需要頻繁創(chuàng)建和銷毀的對(duì)象時(shí)單例模式無(wú)疑可以提高系統(tǒng)的性能与涡。
5.允許可變數(shù)目的實(shí)例。
6.避免對(duì)共享資源的多重占用冒窍。
缺點(diǎn):
1.不適用于變化的對(duì)象递沪,如果同一類型的對(duì)象總是要在不同的用例場(chǎng)景發(fā)生變化,單例就會(huì)引起數(shù)據(jù)的錯(cuò)誤综液,不能保存彼此的狀態(tài)款慨。
2.由于單利模式中沒(méi)有抽象層,因此單例類的擴(kuò)展有很大的困難谬莹。
3.單例類的職責(zé)過(guò)重檩奠,在一定程度上違背了“單一職責(zé)原則”。
4.濫用單例將帶來(lái)一些負(fù)面問(wèn)題附帽,如為了節(jié)省資源將數(shù)據(jù)庫(kù)連接池對(duì)象設(shè)計(jì)為的單例類埠戳,可能會(huì)導(dǎo)致共享連接池對(duì)象的程序過(guò)多而出現(xiàn)連接池溢出;如果實(shí)例化的對(duì)象長(zhǎng)時(shí)間不被利用蕉扮,系統(tǒng)會(huì)認(rèn)為是垃圾而被回收整胃,這將導(dǎo)致對(duì)象狀態(tài)的丟失。