单例模式基础笔记
一、單例模式概念單例模式,是一種常用的軟件設(shè)計模式。在它的核心結(jié)構(gòu)中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統(tǒng)中,應(yīng)用該模式的類一個類只有一個實例。即一個類只有一個對象實例。二、單例模式定義單例模式確保某個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。在計算機系統(tǒng)中,線程池、緩存、日志對象、對話框、打印機、顯卡的驅(qū)動程序?qū)ο蟪1辉O(shè)計成單例。這些應(yīng)用都或多或少具有資源管理器的功能。每臺計算機可以有若干個打印機,但只能有一個Printer Spooler,以避免兩個打印作業(yè)同時輸出到打印機中。每臺計算機可以有若干通信端口,系統(tǒng)應(yīng)當集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調(diào)用。三、單例模式通用寫法public class Singleton {private static final Singleton singleton = new Singleton();//限制產(chǎn)生多個對象private Singleton(){}//通過該方法獲得實例對象public static Singleton getSingleton(){return singleton;}//類中其他方法,盡量是staticpublic static void doSomething(){}}四、單例模式優(yōu)點1.在單例模式中,活動的單例只有一個實例,對單例類的所有實例化得到的都是相同的一個實例。這樣就 防止其它對象對自己的實例化,確保所有的對象都訪問一個實例?2.單例模式具有一定的伸縮性,類自己來控制實例化進程,類就在改變實例化進程上有相應(yīng)的伸縮性。?3.提供了對唯一實例的受控訪問。?4.由于在系統(tǒng)內(nèi)存中只存在一個對象,因此可以 節(jié)約系統(tǒng)資源,當 需要頻繁創(chuàng)建和銷毀的對象時單例模式無疑可以提高系統(tǒng)的性能。?5.允許可變數(shù)目的實例。?五、單例模式缺點1.不適用于變化的對象,如果同一類型的對象總是要在不同的用例場景發(fā)生變化,單例就會引起數(shù)據(jù)的錯誤,不能保存彼此的狀態(tài)。?2.由于單例模式中沒有抽象層,因此單例類的擴展有很大的困難。?3.單例類的職責過重,在一定程度上違背了“單一職責原則”。?4.濫用單例將帶來一些負面問題,如為了節(jié)省資源將數(shù)據(jù)庫連接池對象設(shè)計為的單例類,可能會導(dǎo)致共享連接池對象的程序過多而出現(xiàn)連接池溢出;如果實例化的對象長時間不被利用,系統(tǒng)會認為是垃圾而被回收,這將導(dǎo)致對象狀態(tài)的丟失。?六、單例模式使用注意事項?1.使用時不能用反射模式創(chuàng)建單例,否則會實例化一個新的對象?2.使用懶單例模式時注意線程安全問題?3.餓單例模式和懶單例模式構(gòu)造方法都是私有的,因而是不能被繼承的,有些單例模式可以被繼承(如登記式模式)?七、單例模式適用場景:單例模式只允許創(chuàng)建一個對象,因此節(jié)省內(nèi)存,加快對象訪問速度,因此對象需要被公用的場合適合使用,如多個模塊使用同一個數(shù)據(jù)源連接對象等等。如:?1.需要頻繁實例化然后銷毀的對象。?2.創(chuàng)建對象時耗時過多或者耗資源過多,但又經(jīng)常用到的對象。?3.有狀態(tài)的工具類對象。?4.頻繁訪問數(shù)據(jù)庫或文件的對象。
總結(jié)
- 上一篇: 【MATLAB】基本绘图 ( 保存图像
- 下一篇: Leetcode 系列 | 反转链表