免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

Java單例模式,看這一篇就夠了

在創(chuàng)建型設(shè)計模式中,我們第一個學(xué)習(xí)的是單例模式(Singleton Pattern),這是設(shè)計模式中最簡單的模式之一 。
單例是什么意思呢?
單例就是單實例的意思,即在系統(tǒng)全局,一個類只創(chuàng)建一個對象,并且在系統(tǒng)全局都可以訪問這個對象而不用重新創(chuàng)建 。
一、單例模式的基本寫法單例模式示例代碼:
public class Singleton {// Singleton類自己持有這個單例對象private static Singleton instance = new Singleton();// 構(gòu)造方法設(shè)置為私有,避免在Singleton類外部創(chuàng)建Singleton對象private Singleton() {}// 提供獲取單例對象的靜態(tài)方法public static Singleton getInstance() {return instance;}public void hello() {System.out.println("Hello!");}}使用:
Singleton obj = Singleton.getInstance();obj.hello();分析SingleObject類的特征:

  1. SingleObject類的構(gòu)造方法是私有的,這樣可以保證只能在SingleObject類內(nèi)部才能創(chuàng)建對象,而無法在類外部創(chuàng)建SingleObject對象 。
  2. SingleObject類中有一個instance成員屬性,它用來持有這個SingleObject對象 。
  3. SingleObject類提供了一個靜態(tài)方法getInstance,它可以讓我們在任何可以訪問到SingleObject類的地方,都可以使用SingleObject.getInstance()來獲取到這個SingleObject對象 。
二、單例模式的作用單例模式有什么用呢?
1. 控制對象的數(shù)量
當(dāng)你編寫了一個類提供給其他人調(diào)用時,對方看到是一個類,很有可能第一反應(yīng)是嘗試new一下 。
你自己編寫的類你自己是清楚如何使用的,在整個系統(tǒng)內(nèi)這個類只需要創(chuàng)建一個對象就夠了,但對方可能并不清楚 。
這時候你可以把這個類編寫為單例形式,把構(gòu)造方法私有化,讓對方無法通過new來創(chuàng)建對象,只能使用getInstance來獲取 。
這個模式可以幫助你有效的控制對象的數(shù)量,畢竟,有的類其內(nèi)部實現(xiàn)復(fù)雜,如果頻繁創(chuàng)建銷毀對象,可能還是很耗費服務(wù)器資源的 。
2.全局訪問
單例模式的特點是單例類自己持有這個單例對象,并且提供一個靜態(tài)方法可在全局獲取到這個單例對象 。
如果沒有單例模式的情況下,我們一般是在代碼A處創(chuàng)建這個對象,在代碼B處如果也要使用這個對象,就需要將這個對象進行參數(shù)傳遞 。為了避免傳來傳去,我們可能會寫個Holder類,把這個對象放在Holder的成員變量中 。
而單例模式的這個優(yōu)點是,我們可以避免這樣的困擾,直接從單例類中獲取 。
三、單例模式的變種上面介紹的是單例模式的一種基本寫法,實際我們還可以對其進行優(yōu)化和變種 。
1. 餓漢式基本寫法中,對象的創(chuàng)建是直接寫在Singleton類的成員屬性上的,因此當(dāng)Singleton類被加載時,就會立即創(chuàng)建Singleton對象,這個寫法比較簡單,但我們可能并不會馬上使用到這個Singleton對象,過早的創(chuàng)建會造成內(nèi)存資源浪費 。
這種一加載類就急于創(chuàng)建對象的寫法,我們稱之為餓漢式 。
如果對內(nèi)存資源不在意,那么其實餓漢式這個寫法也就沒什么大的缺點,而且寫起來還簡單,還是可以用的 。
2. 懶漢式(線程不安全)此變種僅是介紹,不要使用 。
既然餓漢式在類加載時就創(chuàng)建對象會造成內(nèi)存浪費,那么我們把創(chuàng)建對象這個步驟挪到要用時再創(chuàng)建不就好了?
我們要使用對象時,都是通過getInstance方法先獲取對象,我們可以在getInstance方法中完成對象創(chuàng)建 。
這種需要時再創(chuàng)建的寫法,我們稱之為懶漢式
示例代碼:
public class Singleton {private static Singleton instance;private Singleton () {}public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}}

經(jīng)驗總結(jié)擴展閱讀