單例模式(Singleton)

2021-10-02 08:47:34 字數 1670 閱讀 3433

單例模式又叫做 singleton模式,指的是乙個類,在乙個jvm裡,只有乙個例項存在。

(1)餓漢式單例模式:

giantdragon 應該只有乙隻,通過私有化其構造方法,使得外部無法通過new 得到新的例項。

giantdragon 提供了乙個public static的getinstance方法,外部呼叫者通過該方法獲取12行定義的物件,而且每一次都是獲取同乙個物件。 從而達到單例的目的。

這種單例模式又叫做餓漢式單例模式,無論如何都會建立乙個例項。

例子:

package charactor1;

public

class

giantdragon

//準備乙個類屬性,指向乙個例項化物件。 因為是類屬性,所以只有乙個

private

static giantdragon instance =

newgiantdragon()

;//public static 方法,提供給呼叫者獲取12行定義的物件

public

static giantdragon getinstance()

}

package charactor1;

public

class

testgiantdragon

}

(2)懶漢式單例模式 :

懶漢式單例模式與餓漢式單例模式不同,只有在呼叫getinstance的時候,才會建立例項。

例子:

package charactor1;

public

class

giantdragon

//準備乙個類屬性,用於指向乙個例項化物件,但是暫時指向null

private

static giantdragon instance;

//public static 方法,返回例項物件

public

static giantdragon getinstance()

//返回 instance指向的物件

return instance;

}}

package charactor1;

public

class

testgiantdragon

}

(3)兩種方式區別:

餓漢式是立即載入的方式,無論是否會用到這個物件,都會載入。

如果在構造方法裡寫了效能消耗較大,佔時較久的**,比如建立與資料庫的連線,那麼就會在啟動的時候感覺稍微有些卡頓。

懶漢式,是延遲載入的方式,只有使用的時候才會載入。 並且有執行緒安全的考量(鑑於同學們學習的進度,暫時不對執行緒的章節做展開)。

使用懶漢式,在啟動的時候,會感覺到比餓漢式略快,因為並沒有做物件的例項化。 但是在第一次呼叫的時候,會進行例項化操作,感覺上就略慢。

看業務需求,如果業務上允許有比較充分的啟動和初始化時間,就使用餓漢式,否則就使用懶漢式。

(4)一版面試題:

這個是面試的時候經常會考的點,面試題通常的問法是:

什麼是單例模式?

回答的時候,要答到三元素

構造方法私有化

靜態屬性指向例項

public static的 getinstance方法,返回第二步的靜態屬性 。

Singleton 單例 模式

singleton 模式的宗旨在於確保某個類只有乙個例項,別且為之提供乙個全域性訪問點。為了防止其他工作人員例項化我們的類,可以為該類建立唯一乙個構造器,並將構造器的可見 設定為私有。值得注意的是,如果我們建立了其他的非私有的構造器,或者根本沒有為該類提 供構造器,那麼其他人員還是能例項化我們的類。...

Singleton 單例 模式

今天看了,單例模式。感覺他的本質就是,控制類例項的個數。特例就是,控制static變數的唯一性,保證各個程式共享著同一例項。乙個例子 package singleton description 這是乙個單例模式的使用demo author kyle goal 實現乙個類僅有乙個例項 singleto...

單例(Singleton)模式

單例模式的特點 singleton模式包含的角色只有乙個,那就是singleton。singleton擁有乙個私有建構函式,確保使用者無法通過new取得singleton的例項。除此之外,該模式中包含乙個靜態私有成員變數instance與靜態公有方法instance。instance方法負責檢驗並例...