1. 程式人生 > >單例模式Singleton---小白初識

單例模式Singleton---小白初識

1.      什麼是單例模式?單例模式的應用場景?

名稱:單例模式

英文名:Singleton

定義:java中單例模式是一種常見的設計模式,單例就是“一個物件,只例項化一次。”

分類:主要分為:“懶漢式”單例模式 ||“餓漢式”單例模式

具體分類定義:

(1)懶漢式:           

//懶漢式單例類,在本類第一次呼叫的時候例項化自己

publicclassLazyManSingleton {

//私有化構造方法

   private LazyManSingleton(){}

   //定義空單例物件,不呼叫,則不例項

   privatestaticLazyManSingleton

single=null;

//靜態工廠方法

  publicstaticLazyManSingleton getInstance()

     {

    if(single==null)

        {  //當被呼叫時,例項化懶漢物件

      single=new LazyManSingleton();}

           returnsingle;

}

}

(2)餓漢式:

  //餓漢式單例類,在類初始化時,自行例項化

publicclassHungryManSingleton {

//私有化構造方法

private HungryManSingleton (){}

//私有例項化後的

”  化餓漢單例物件

privatestaticfinal HungryManSingleton single=new HungryManSingleton();

//靜態工廠方法

publicstatic HungryManSingletongetInstance()

{

//被呼叫時直接返回已經準備好的物件

returnsingle;

}

}

程式碼理解:

首先看看程式碼:無論是lazy還是hungry,他們的單例類都是相同步驟:

第一步:(壟斷)------私有化構造器,這步有何作用呢?總所周知,私有化的東西(變數,方法,構造器)只能被本類(A類)使用,其他類不能直接呼叫,就算是父子類也不行。所以私有化構造器,就確保了其他類不能隨意呼叫A類的構造方法,建立A類的例項物件了,這樣的話,想建立幾個A類物件就要看A類自己的心情了。A類想建立幾個就建立幾個。其他類因為調用不了A類的構造器,所以永遠都不能創建出一個A類物件。當然,天無絕人之路,雖然其他類不能自己生產A類物件了,但是A類可以生產完“賣給”其他類呀,這就要看第二步,第三步了。

第二三步:(生產【盒子】【貨】,發貨)-------A類生產,並傳遞A類物件的環節。這裡也就是“懶漢”和“餓漢”的區別所在了,假設懶漢是A1類,這個A1很懶,做事拖沓,每次都不提前準備一些貨(A1物件),以至於他的物件盒子是空的,只有在別的類來催的時候,才急急忙忙的在靜態工廠裡生產,生產完直接裝箱送貨。所以A1的靜態工廠,是既負責生產,又負責發貨,苦啊,一條龍全包了

。  而“餓漢”A2類,那就不一樣,典型的高效外賣館啊,別人訂貨的瞬間就把盒飯打包好,然後瞬間傳遞到靜態工廠,A2的靜態工廠就只是一個送飯的作用了,不負責做飯。

單例模式的特點:(1)單例類只能有一個例項

               (2)單例類必須自己建立自己的唯一例項

                (3)單例類必須給所有其他物件提供這一個例項

特點詳解:(1)單例模式為啥只有一個例項,為什麼不多建立幾個例項?

答:單例模式,單例模式,顧名思義,只有一個例項,多好,多麼的節約記憶體,還不容易產生混淆。就一個例項還不好辨認嗎?物件很安全。許多時候,整個系統只需要擁有一個全域性物件,這樣的好處是,我們更容易協調系統整體的行為,這和秦始皇統一度量衡一個道理。專業點的解釋一下就是,比如某個伺服器程式中,該伺服器的配置資訊存放在一個檔案中,這些配置資料由一個單例物件統一讀取(咋讀取啊?),然後服務程序中的其他物件再通過這個單例物件獲取這些配置資訊。這種方式簡化了複雜環境下的配置管理。叼!

(2)單例物件必須自己建立自己唯一的物件。

答:讀起來是不是很拗口?其實意思很簡單,自己的物件自己建,別人辦事,我不放心,自己動手,最合心意。單例類,他是幹嘛的?為了啥,才被我們創建出來的?他的目的就是執行統一大業的,統一度量衡,統一文字,統一車軌的,所以他就是標準,他只能是唯一。如果楚國說:“秦國,你的度量衡要按咱楚國的推廣”,齊國說:“秦國,你的文字要按俺的來”,燕國說:“那車軌就按俺們那嘎達燕淫的”。你是秦國,你咋辦?秦國:“一群羊雜碎,統統按額們秦國滴標準來。”所以標準還得自己來造,交給別人一人一個樣。

(3)單例類必須給所有其他物件提供這一個例項

答:綜合上面那兩個特點,最後一個就不用詳解了。你秦國統一文字,度量,車軌,法律幹嘛呢,玩兒呢?肯定是推廣出去啊,讓別人也體驗一下商鞅變法的封建主義的優越性啊。