單例模式又叫做 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方法負責檢驗並例...