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