各位老鐵們好,相信很多人對java單列模式都不是特別的了解,因此呢,今天就來為大家分享下關(guān)于java單列模式以及用java寫一個單例類的問題知識,還望可以幫助大家,解決大家的一些困惑,下面一起來看看吧!
如何寫出面試官欣賞的Java單例
1.比較常見且相對完美的答案,可以采用DCL(DoubleCheckLock)單例。
2.另一種完美的寫法就是靜態(tài)內(nèi)部類的單例。
3.最后一種是Java集合框架的作者JoshuaBloch,在《effectivejava》中推薦的寫法,“單元素的枚舉類型已經(jīng)成為實現(xiàn)Singleton的最佳方法”。
這種方法不僅可以保證線程安全,還可以防止序列化和反射。
以上三種方式,第一種比較常見且常用。后兩種不太常見,但卻是完美的實現(xiàn)方法,相信你寫出來可以讓面試官眼前一亮!
如何理解java中的懶漢式和餓漢式單例python中有沒有這種單例模式
簡單白話文描述:
懶漢可以理解為懶加載,就是說如果你不用,我就不給你實例化。
反之餓漢模式,就是不管你用不用,我先把單例給你創(chuàng)建出來。
在java三層架構(gòu)中,單例的service層為什么不使用靜態(tài)static方式來實現(xiàn)
首先我們看一下java開發(fā)的層次結(jié)構(gòu)有哪些,都分別是什么內(nèi)容。
java開發(fā)有兩個層次結(jié)構(gòu),一個是三層結(jié)構(gòu),一個是N層結(jié)構(gòu)。我們先看三層結(jié)構(gòu):
ClientTier(客戶層)。這一層主要的工作有兩項,一個是為用戶提供輸入頁面,另一個是為用戶提供結(jié)果的輸出頁面。主要的工作在于設(shè)計和內(nèi)容展示,如何讓用戶使用的更方便,效果看起來更好是主要目標。BusinessTier(業(yè)務(wù)處理層)。這一層的主要功能是處理用戶的請求并返回結(jié)果。這一層是設(shè)計和實現(xiàn)的核心層,所有的業(yè)務(wù)處理都集中在這一層,問題中提到的service就處在這一層。在服務(wù)端很多組件都為處理用戶的請求服務(wù),有做導(dǎo)航的,有做邏輯運算的,有做數(shù)據(jù)庫處理的等等,所以service中包含的服務(wù)太多了,為什么不能設(shè)計成static呢?設(shè)計成static無非就是幾個目的:讓對象常駐內(nèi)存,提前加載,對象之間共享數(shù)據(jù)。而這些并不是每一個service組件都需要的,而且static會長時間占用存儲空間,這會嚴重影響系統(tǒng)的處理能力。所以在service組件中的servlet官方描述中嚴禁使用static,因為本身servlet在運行時就具備了static的部分運行機制(通過容器的配置),如果再定義為static就沒有必要了。EISTier(企業(yè)信息系統(tǒng)層)。這一層的任務(wù)有一個就是數(shù)據(jù)存儲,通常這層有兩個解決方案:一個是數(shù)據(jù)庫,另一個是ERP(也可以叫遺留系統(tǒng),為了保護投資,其實我覺得叫遺留系統(tǒng)更為合適,但是官方文檔稱為ERP)。不管哪種方式作用是一樣的就是管理數(shù)據(jù)。另外一個N層結(jié)構(gòu)通常就是四層結(jié)構(gòu),在三層結(jié)構(gòu)的基礎(chǔ)上,增加了一個WebTier(web層),主要是做web交互的,通常和service層統(tǒng)稱為后臺。
希望我的回答能解答你的疑惑。
好了,關(guān)于java單列模式和用java寫一個單例類的問題到這里結(jié)束啦,希望可以解決您的問題哈!