java中如何保證對象在內存中的惟一性

本文轉自互聯網java

 

剛看到這個題目的朋友第一反應確定是好奇,以後再細細思考下就會發現這個題目眼熟了。面試

就算是同一個答案,若是提問的方式不一樣,設計模式

每每會對回答形成干擾或者影響,函數

上學的時候老師也說過差很少的話,學習

學過設計模式的人看到這個題目以後確定不會陌生:請描述java中單例設計模式的實現步驟,那估計就能答出來了。spa

而java中的單例模式,相信只要是你看過一些java視頻教程,確定就能寫出來的。設計

因此咱們在平時學習的時候要注意觸類旁通,掌握其精髓,這樣在面試或者工做的時候才能應對自如,長此以往,就成爲了大神級別。日誌

 

解決的問題:保證對象在內存中的惟一性。code


平時在開發的時候常常會遇到以下場景:多程序讀取一個配置文件時,記錄日誌時。視頻

若是建立多個對象的話,可能會引起出各類各樣的問題,這時,就須要咱們保證這個對象在內存中的惟一性

java中的Runtime()方法就是單例設計模式進行設計的。


如何保證對象惟一性呢?


思考:
1,不讓其餘程序建立該類對象。
2,在本類中建立一個本類對象。
3,對外提供方法,讓其餘程序獲取這個對象。


步驟:
1,由於建立對象都須要構造函數初始化,只要將本類中的構造函數私有化,其餘程序就沒法再建立該類對象;
2,就在類中建立一個本類的對象;
3,定義一個方法,返回該對象,讓其餘程序能夠經過方法就獲得本類對象。這樣方便咱們進行控制;


代碼體現:
1,私有化構造函數;
2,建立私有並靜態的本類對象;
3,定義公有並靜態的方法,返回該對象。

//餓漢式
class Single{
private Single(){} //私有化構造函數。
private static Single s = new Single(); //建立私有並靜態的本類對象。
public static Single getInstance(){ //定義公有並靜態的方法,返回該對象。
return s;
}
}

 

//懶漢式:延遲加載方式。
class Single2{
private Single2(){}
private static Single2 s = null;
public static Single2 getInstance(){
if(s==null)
s = new Single2();
return s;
}
}
相關文章
相關標籤/搜索