單例模式(Singleton Pattern): 定義:Ensure a class has only instance , and provide a global point of access to it.(確保某一個(gè)類只有一個(gè)實(shí)例,而且自動(dòng)實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例) 優(yōu)點(diǎn): 1、在內(nèi)存中只有一個(gè)實(shí)例,所以減少了內(nèi)存開銷,特別是在一個(gè)對(duì)象需要頻繁地創(chuàng)建、銷毀時(shí),而且創(chuàng)建或銷毀時(shí)性能又無法優(yōu)化。單例模式的優(yōu)勢(shì)非常明顯; 2、避免對(duì)資源的多重占用。例如寫文件動(dòng)作,由于只有個(gè)實(shí)例存在內(nèi)存中,避免對(duì)同一個(gè)資源文件的同時(shí)寫操作 3、提供了對(duì)唯一實(shí)例的受控訪問。 4、允許可變數(shù)目的實(shí)例。 缺點(diǎn): 1、沒有接口,擴(kuò)展困難。 2、不適用于變化的對(duì)象,如果同一類型的對(duì)象總是要在不同的用例場景發(fā)生變化,單例就會(huì)引起數(shù)據(jù)的錯(cuò)誤,不能保存彼此的狀態(tài)。 3、濫用單例將帶來一些負(fù)面問題,如為了節(jié)省資源將數(shù)據(jù)庫連接池對(duì)象設(shè)計(jì)為的單例類,可能會(huì)導(dǎo)致共享連接池對(duì)象的程序過多而出現(xiàn)連接池溢出;如果實(shí)例化的對(duì)象長時(shí)間不被利用,系統(tǒng)會(huì)認(rèn)為是垃圾而被回收,這將導(dǎo)致對(duì)象狀態(tài)的丟失。 4、單例類的職責(zé)過重,在一定程度上違背了“單一職責(zé)原則”。 適用場景: 1、資源共享的情況下,避免由于資源操作時(shí)導(dǎo)致的性能或損耗等。如上述中的日志文件,應(yīng)用配置。 2、控制資源的情況下,方便資源之間的互相通信。如線程池等。 3、需要定義大量的靜態(tài)常量和靜態(tài)方法(如工具類)的環(huán)境,可以采用單例模式 UML圖: 單例模式的幾種書寫方式: 1.餓漢式單例:單例實(shí)例在類裝載時(shí)就構(gòu)建 , 特點(diǎn):線程安全 在類加載的同時(shí)已經(jīng)創(chuàng)建好一個(gè)靜態(tài)對(duì)象,調(diào)用時(shí)反應(yīng)速度快 [AppleScript] 純文本查看 復(fù)制代碼 特點(diǎn): 避免了餓漢式的那種在沒有用到的情況下創(chuàng)建事例,資源利用率高,不執(zhí)行g(shù)etInstance()就不會(huì)被實(shí)例,可以執(zhí)行該類的其他靜態(tài)方法。但是多個(gè)線程判斷instance都為null時(shí),在執(zhí)行new操作時(shí)多線程會(huì)出現(xiàn)重復(fù)情況 [AppleScript] 純文本查看 復(fù)制代碼
特點(diǎn): 資源利用率高,不執(zhí)行g(shù)etInstance()就不被實(shí)例,可以執(zhí)行該類其他靜態(tài)方法 但是第一次加載時(shí)反應(yīng)不快 [AppleScript] 純文本查看 復(fù)制代碼
[AppleScript] 純文本查看 復(fù)制代碼 好了,這一章就寫到這,歡迎大家加入QQ群:280993838 。或者關(guān)注我的公眾號(hào): |
|