设计模式-----单例模式优缺点及使用场景
1、什么是單例模式?
? ? ? ? 單例模式就是保證系統(tǒng)中一個(gè)類只有一個(gè)實(shí)例。也就是說只能自己new自己并且實(shí)例唯一并對外提供。
2、模式的作用及應(yīng)用場景?
? ? ? 作用:解決一個(gè)全局使用的類,頻繁創(chuàng)建和銷毀。擁有對象的唯一性,并保證內(nèi)存中對象的唯一??梢怨?jié)省內(nèi)存,因?yàn)閱卫灿靡粋€(gè)實(shí)例,有利于Java的垃圾回收機(jī)制。
????????????????也就是控制資源使用,通過線程同步來控制資源的并發(fā)訪問;
????????????????控制實(shí)例產(chǎn)生的數(shù)量,達(dá)到節(jié)約資源的目的;
????? 應(yīng)用場景舉例:
???????????????????????????1、統(tǒng)計(jì)當(dāng)前在線人數(shù)(網(wǎng)站計(jì)數(shù)器):用一個(gè)全局對象來記錄。
????????????????????????? ?2、打印機(jī)(設(shè)備管理器):當(dāng)有兩臺打印機(jī),在輸出同一個(gè)文件的時(shí)候只一臺打印機(jī)進(jìn)行輸出。
??????????????????????????3、數(shù)據(jù)庫連接池(控制資源):一般是采用單例模式,因?yàn)閿?shù)據(jù)庫連接是一種連接數(shù)據(jù)庫資源,不易頻繁創(chuàng)建和銷毀。
?????????????????????????數(shù)據(jù)庫軟件系統(tǒng)中使用數(shù)據(jù)庫連接池,主要是節(jié)省打開或者關(guān)閉數(shù)據(jù)庫連接所引起的效率損耗,這種效率? ??????????????的損耗還是非常昂貴的,因此用單例模式來維護(hù),就可以大大降低這種損耗。
????????????????????????? 4、應(yīng)用程序的日志(資源共享):一般日志內(nèi)容是共享操作,需要在后面不斷寫入內(nèi)容所以通常單例設(shè)計(jì)。
3、單例模式的優(yōu)缺點(diǎn)
????????? ? 優(yōu)點(diǎn):1、減少內(nèi)存開銷,尤其是頻繁的創(chuàng)建和銷毀實(shí)例
?????????????????????2、避免對資源對過多占用。
????????? ? 缺點(diǎn):1、沒有抽象層,不能繼承擴(kuò)展很難。
????????????????? ? ?2、違背了“單一職責(zé)原則”,一個(gè)類只重視內(nèi)部關(guān)系,而忽略外部關(guān)系。
?????????????????????3、不適用于變化對象。
?????????????????????4、濫用單例會(huì)出現(xiàn)一些負(fù)面問題,如為節(jié)省資源將數(shù)據(jù)庫連接池對象設(shè)計(jì)為單例,可能會(huì)導(dǎo)致共享連接池對象對程序過多而出現(xiàn)連接池溢出。如果實(shí)例化的對象長時(shí)間不被利用,系統(tǒng)會(huì)認(rèn)為是垃圾而被回收,這樣將導(dǎo)致對象狀態(tài)丟失。
總結(jié)
以上是生活随笔為你收集整理的设计模式-----单例模式优缺点及使用场景的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: org.dom4j.DocumentEx
- 下一篇: 设计模式----单例模式实例