摘要:一單例模式定義單例模式確保某個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。技術(shù)實現(xiàn)單例模式靜態(tài)內(nèi)部類評價使用靜態(tài)內(nèi)部類的方式,只有在使用該實例的時候,才去加載靜態(tài)內(nèi)部類,從而實現(xiàn)延時加載。
一、單例模式定義:
單例模式確保某個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。在計算機系統(tǒng)中,線程池、緩存、日志對象、對話框、打印機、顯卡的驅(qū)動程序?qū)ο蟪1辉O計成單例。這些應用都或多或少具有資源管理器的功能。每臺計算機可以有若干個打印機,但只能有一個Printer Spooler,以避免兩個打印作業(yè)同時輸出到打印機中。每臺計算機可以有若干通信端口,系統(tǒng)應當集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調(diào)用??傊x擇單例模式就是為了避免不一致狀態(tài),避免政出多頭。
二、實現(xiàn)方式:
懶漢模式
public class Demo { // 1、私有構(gòu)造函數(shù) private Demo() {} // 2、單例實例 private static Demo instance = null; // 3、獲取實例接口 public static Demo getInstance() { if(instance == null) { synchronized(Demo.class) { if(instance == null) { instance = new Demo(); } } } return instance; } }
評價:延時加載,節(jié)約了內(nèi)存。效率相對低一些。利用同步塊實現(xiàn)線程安全。
餓漢模式
public class Singletion { private Singletion() {} private static Singletion instance = new Singletion(); // Singletion類加載的時候,就初始化這個實例 public static Singletion getInstance() { return instance; } }
評價:程序啟動時加載,先加載類,再初始化靜態(tài)屬性,由于后面無法再對對象進行修改,從而實現(xiàn)線程安全,效率相對高一些。占用內(nèi)存相對多一些。
IoDH技術(shù)實現(xiàn)單例模式(靜態(tài)內(nèi)部類)
public class Singletion { private Singletion () {} private static class InnerSingletion { private static Singletion single = new Singletion(); } public static Singletion getInstance(){ return InnerSingletion.single; } }
評價:使用靜態(tài)內(nèi)部類的方式,只有在使用該實例的時候,才去加載靜態(tài)內(nèi)部類,從而實現(xiàn)延時加載。因為靜態(tài)內(nèi)部類只初始化一次,靜態(tài)內(nèi)部類的靜態(tài)屬性也只初始化一次,后面無法修改對象的狀態(tài),從而實現(xiàn)線程安全。綜合了上述兩種方法的優(yōu)點。
三、單例模式的優(yōu)缺點:
(1)單例模式?jīng)]有抽象層,因此單例模式的擴展比較困難的。
(2)單例類的職責過重,一定程度上違背了“單一職責原則”。
(3)長時間不使用的單例類可能被系統(tǒng)回收,導致單例對象狀態(tài)的丟失。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69119.html
摘要:什么是設計模式設計模式是一種能夠被反復使用,符合面向?qū)ο筇匦缘拇a設計經(jīng)驗的總結(jié),合理的使用設計模式能夠讓你得代碼更容易維護和可靠設計模式的類型共分為創(chuàng)建型模式,結(jié)構(gòu)型模式,行為型模式三種創(chuàng)建型模式創(chuàng)建型模式是對一個類的實例化過程進行了抽象 什么是設計模式 設計模式是一種能夠被反復使用,符合面向?qū)ο筇匦缘拇a設計經(jīng)驗的總結(jié),合理的使用設計模式能夠讓你得代碼更容易維護和可靠設計模式的類型...
摘要:單例模式單例對象是一種常用的設計模式。使用代理模式,可以將功能劃分的更加清晰,有助于后期維護代碼如下這幾種都是比較常用的設計模式,更多設計模式后期會繼續(xù)添加。 說起設計模式,很多編程語言的設計模式大同小異,而且設計模式很多,這里就介紹一下java的幾種常見的設計模式,其實設計模式就是一個軟件的設計思想,從大型軟件架構(gòu)出發(fā),為了升級和維護方便,所以要降低依賴,降低耦合。先說下設計模式原則...
摘要:在面向?qū)ο蟮恼Z言中,比如,等,單例模式通常是定義類時將構(gòu)造函數(shù)設為,保證對象不能在外部被出來,同時給類定義一個靜態(tài)的方法,用來獲取或者創(chuàng)建這個唯一的實例。 萬事開頭難,作為正經(jīng)歷菜鳥賽季的前端player,已經(jīng)忘記第一次告訴自己要寫一些東西出來是多久以的事情了。。。如果,你也和我一樣,那就像我一樣,從現(xiàn)在開始,從看到這篇文章開始,打開電腦,敲下你的第一篇文章(或者任何形式的文字)吧。 ...
摘要:單例模式的定義是保證一個類只有僅有一個實例,并提供一個訪問它的全局訪問點。并且按照單一職責原則類實現(xiàn)功能類管理單例管理單例模式,達到可組合的的效果創(chuàng)建普通類引入代理類惰性單例模式分離創(chuàng)建實例對象的職責與管理單例的職責。 單例模式的定義是:保證一個類只有僅有一個實例,并提供一個訪問它的全局訪問點。 單例模式是一種常用的模式,有些對象我們往往只需要一個,比如線程池,全局緩存,window對...
閱讀 2919·2021-11-24 09:39
閱讀 1176·2021-11-02 14:38
閱讀 4177·2021-09-10 11:26
閱讀 2764·2021-08-25 09:40
閱讀 2320·2019-08-30 15:54
閱讀 492·2019-08-30 10:56
閱讀 2758·2019-08-26 12:14
閱讀 3228·2019-08-26 12:13