設計模式 單例模式懶漢式與餓漢式的區別

2021-08-21 07:20:08 字數 1218 閱讀 1191

在單例模式中,乙個類只允許有乙個例項物件。之前的理解是使用者自覺遵守乙個類只建立乙個例項物件的規則,其實這是錯誤的,單例模式中,會給類做一些特殊處理,使得使用者只能得到乙個該類的例項物件。使用者是無法獲取第二個例項物件的。

其中又有懶漢式和餓漢式,下面簡單說一下兩種方式的區別。

懶漢式:

(1):將類的構造器宣告為私有化,這就使得外部無法通過建構函式建立這個類的物件了。那麼如何建立這個類的唯一那個物件呢?

(2):在該類中宣告乙個靜態的私有的該類的變數。不初始化,或初始化為null,這是懶漢式的特點。

(3):為該類建立乙個對外公共的靜態的方法訪問該變數,如果該變數為null,建立它。

public class test

public static test gettest()

return t; //返回建立好的唯一該類物件

}}

餓漢式:

(1):將類的構造器宣告為私有化,這就使得外部無法通過建構函式建立這個類的物件了。

(2):在該類中宣告乙個靜態的私有的該類的變數。並初始化它,這是餓漢式的特點。

(3):為該類建立乙個對外公共的靜態的方法訪問該變數。

public class test

public static test gettest()

}

這種建立方法並不是最佳的,因為有時就算不需要用到t物件,而需要用到test類其他方法時t物件也會建立出來,這是因為成員變數在類載入時一定會被初始化。

最佳方法是:將這個成員的宣告放到內部類中去:

public class test

private test() //將構造器宣告為private很關鍵

public static test gettest()

}

由於類只有在使用到的時候才載入,這樣只有真正需要這個test物件t時,呼叫gettest方法,這個內部類才被載入,t才被建立。而用到test類其他方法時,這個內部類並不會被載入,t物件也就沒有被建立。這樣減少無用物件的產生。

設計模式 單例模式 餓漢式,懶漢式

餓漢式 將物件的實現提前準備好,物件指向的記憶體只能有乙個。public class singlection1 餓漢式單例實現 將物件的實現提前準備好 private static final singlection1 single1 new singlection1 靜態工廠 public sta...

單例設計模式 懶漢式與餓漢式

1 概念 在某些場合中,乙個類對外提供乙個且只提供乙個物件時,這樣的類的類叫做單例類。編寫單例類的模式叫做單例設計模式,是程式設計的總結。2 思路 在程式中,如果其它的類需要用到這個類的物件,都是通過new的方式建立類物件,這時就根本無法控制其他類new物件的個數,那麼如何保證保證只有乙個new物件...

單例模式 懶漢式與餓漢式

什麼是單例設計模式 保證這個類的物件永遠有且只有乙個。單例設計模式有兩種 見如下兩種宣告方式 1.懶漢式 設計單例模式 懶漢式 先建立乙個私有的靜態物件 private static user user 建立乙個私有的構造方法 private user 建立乙個公有的靜態的返回物件的方法,需要判斷 ...