簡體   English   中英

java singleton class vs final class

[英]java singleton class vs final class

有人可以在java單例設計模式類vs java final類上清楚地解釋一下。

我們可以使用final類而不是使用singleton類嗎?

對於最后一個類,我們可以創建類的實例並使用其中的方法,但不覆蓋屬性,如果方法在final類中是靜態的,那么我們可以調用像ClassName.getMethod這樣的方法,為什么我們要去對於單身而不是最后的課程?

最后一堂課是無法延期的。 您可以在最終課程中擁有任意數量的實例。 最終類的最佳示例是String Singleton是類的單個實例。 所以兩者都不完全相同,但是你可以讓你的單例類最終限制某人擴展它。

您無法擴展最終類,並且單例類只有一個實例。 因此繼承概念不適用於最終類。 但是你可以在最終的類中創建任意數量的實例,但是你不能在Singleton中創建。

也就是說,final類是不可變類,可以創建多個實例但是Singleton類只有單個實例。

單例是一個類,在程序的所有生命周期中都有一個實例。 但是最后一堂課,你可以擁有它的多個實例。 問題是你不能從最后的類繼承,但沒有什么能阻止你擁有它的很多實例。

單例類通常與ClassLoader綁定。 基本上,每個JVM應該有一個。 final類是你無法繼承的,但僅僅因為它是final並不意味着你不能擁有它的多個實例(每個JVM)。

請注意,當我說每個JVM時,我說的是,例如,一個.war文件中的.class文件被部署一次; 如果多次部署相同的Web應用程序,則每個Web應用程序都有自己的單例

我認為你的問題更多的是靜態與單身。 作為最后一個類在這個上下文中是不相關的,因為你不能覆蓋靜態方法(你當然可以在擴展中定義相同的簽名靜態方法,但這將是無關緊要的,因為在調用的意義上,biding仍然是“靜態的” SuperClass.getMethod將始終從SuperClass調用該定義。 這是一個經典問題,我相信你可以在其他地方找到答案。 但是,為了給你一個簡短的答案,我想說使用單例允許你實現接口並像任何其他對象一樣傳遞你的單例對象。

也許我可以解釋一下,對於任何給我-1的人,我的意思(我認為很清楚)。 最初的問題是關於單身人士與決賽。 但當他解釋時,他明確表示他將使用靜態方法。 他沒有意識到,在方法屬於單個類的意義上使方法獨特的原因是它們是靜態的,因此類方法而不是實例方法。 作為最終結果沒有任何效果:用戶可以根據自己的需要實例化,這只能阻止他擴展課程,而這似乎不是我提出問題的真正關注點。 另一方面,他明確表示他將在最后一堂課中使用靜態方法。 這似乎表明他希望通過使用靜態方法使它成為一個單例:這是一種經典的方法,並且之前已經提出過使用靜態方法與單例的問題。 請參閱例如為什么使用單例而不是靜態方法? 靜態類和單例模式之間的區別? 當我寫下覆蓋靜態方法的時候,我嘗試解釋靜態方法在它們不參與動態綁定的意義上並沒有真正被覆蓋。 舉個例子,如果你有一個帶有靜態方法foo()的類A,然后類B擴展了類A並重新定義了靜態foo(),那就沒問題。 但是在對象obj上調用foo()會調用屬於obj類型的靜態方法,即使你在運行時為它分配了一個不同的對象(這就是我所謂的靜態綁定)。 換句話說,如果你聲明“一個obj = new B()”並調用obj.foo()它仍然會調用A.foo()我不知道這個解釋是否有幫助,我希望誰給了我-1解釋為什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM