1、什麼是單例模式?
單例模式就是保證系統中一個類只有一個實例。也就是說只能自己new自己並且實例唯一併對外提供。
2、模式的作用及應用場景?
作用:解決一個全局使用的類,頻繁創建和銷燬。擁有對象的唯一性,並保證內存中對象的唯一。可以節省內存,因爲單例共用一個實例,有利於Java的垃圾回收機制。
也就是控制資源使用,通過線程同步來控制資源的併發訪問;
控制實例產生的數量,達到節約資源的目的;
應用場景舉例:
1、統計當前在線人數(網站計數器):用一個全局對象來記錄。
2、打印機(設備管理器):當有兩臺打印機,在輸出同一個文件的時候只一臺打印機進行輸出。
3、數據庫連接池(控制資源):一般是採用單例模式,因爲數據庫連接是一種連接數據庫資源,不易頻繁創建和銷燬。
數據庫軟件系統中使用數據庫連接池,主要是節省打開或者關閉數據庫連接所引起的效率損耗,這種效率 的損耗還是非常昂貴的,因此用單例模式來維護,就可以大大降低這種損耗。
4、應用程序的日誌(資源共享):一般日誌內容是共享操作,需要在後面不斷寫入內容所以通常單例設計。
3、單例模式的優缺點
優點:1、減少內存開銷,尤其是頻繁的創建和銷燬實例
2、避免對資源對過多佔用。
缺點:1、沒有抽象層,不能繼承擴展很難。
2、違背了“單一職責原則”,一個類只重視內部關係,而忽略外部關係。
3、不適用於變化對象。
4、濫用單例會出現一些負面問題,如爲節省資源將數據庫連接池對象設計爲單例,可能會導致共享連接池對象對程序過多而出現連接池溢出。如果實例化的對象長時間不被利用,系統會認爲是垃圾而被回收,這樣將導致對象狀態丟失。