java - 在實際應用中使用Singleton Pattern的確切位置是什麼?



(11)

使用Logger時,可以使用Singleton模式作為Logger類。 如果它不是Singleton,每個客戶端都有自己的Logger對象,並且在Multithreaded環境中將在Logger實例上進行並發訪問,並且多個客戶端將同時創建/寫入Log文件,這會導致數據損壞。

我只是好奇使用單身模式...我知道模式是如何工作的以及它可以在哪裡使用但我個人從未在任何實際應用中使用過。 有人可以給出一個可以使用它的例子。如果有人可以解釋它們在實際應用中的使用方式和位置,我真的很感激。 謝謝,斯瓦蒂


通常,單體用於全局配置。 最簡單的例子是LogManager有一個靜態的LogManager.getLogManager()方法,並且使用了一個全局實例。

實際上,這不是一個“真正的”單例,因為您可以從LogManager派生自己的類並以這種方式創建額外的實例 - 但它通常用作單例。

另一個例子是java.lang.Runtime - 來自docs:

每個Java應用程序都有一個Runtime類實例,它允許應用程序與運行應用程序的環境進行交互。 可以從getRuntime方法獲取當前運行時。

這幾乎是單身人士的定義:)

現在單身人士模式在這些日子里大部分都是皺眉頭 - 它引入了緊密耦合,並且使得使用單例的東西更難以測試,因為你不能輕易地模擬出那個組件。 如果沒有它就能逃脫,那就更好了。 盡可能地註入您的依賴項。


Singleton Pattern可用於加載配置,比如在Web應用程序中,我們應該生成一個文件,該文件將存儲在服務器的某個位置。 現在,該位置可以使用單例類從配置文件(屬性文件)中獲取。因為該位置是唯一的,並且將來可能會經常更改,所以我們使用配置文件,以便可以在不部署應用程序的情況下進行修改,以便通過應用程序反映變化和位置將是全球性和獨特的


當您必須僅允許類的單個實例化時,基本上使用Singleton類。 以現實世界為例,在OOP設計庫的情況下,我們可以創建庫類作為單例類。


我在使用pureMVC的應用程序中使用了單例(實際上是其中的一部分)。 我們對這個框架引入的複雜性感到不滿(通過mvc層跟踪方法調用變得複雜和分層)。 因此,我們使用中央單體作為介體,以更好地將層彼此分開。


Singleton是一個很好的設計模式。 在決定模式之前,首先要對問題和解決方案進行深入分析。 如果在您的解決方案中某個對像只有一個實例,並且您希望在設計中對其進行建模,那麼您應該使用單例模式。 例如,如果您在軟件中對PC進行建模,則只有一個PC實例與您正在運行的程序相關。 正如Jon Skeet所說,java.lang.Runtime被建模為單例,因為對於在java運行時內加載和運行的所有java對象,只有一個運行時實例。

很多時候它被用於錯誤的原因。 永遠不要創建一個單例,以便您可以從任何地方輕鬆訪問該對象(如Object :: instance()),而無需傳遞對象。 這是我遇到的最糟糕的用途。


考慮以Singleton Pattern設計的AudioDriverService的情況。 因此我們只允許創建一個AudioDriverService類的實例。 實際上,您的Windows Media Player或Youtube播放器都將共享AudioDriverService的相同對象,而不是創建新實例。


例如,運行具有一個許可證和一個數據庫連接的軟件的試用版本,其在真實單詞中使用單一模式。 可能是大師jon雙向飛碟可以提供這樣的例子。


我在我的Android應用程序中使用了一個媒體播放器,因此我擴展了mediaplayer類,並使用了單例模式,因為我只需要一個實例,並且能夠在我的應用程序的任何其他部分調用相同的實例來檢查是否正在播放,或當前播放的文件。

希望它能幫助你,尊重!!!!


一些例子:

  • 硬件訪問
  • 數據庫連接
  • 配置文件

這是另一個嘗試。

您知道Webmethods,ICAN Seebeyond,Tibco BW和IBM Broker是如何的。 他們都對企業中的集成解決方案提供了幫助。 這些工具通常被稱為企業應用集成(EAI)工具。

大多數圍繞這些技術構建的拖放工具以及您必須用Java編寫適配器的部分。 這些適配器代碼要么未經測試,要么在測試周圍具有較差的工具/自動化程度。

就像編程中的設計模式一樣,您也有用於常見集成解決方案的企業集成模式。 他們被Gregor Hohpe和Bobby Woolf的一本同名書籍著名。

儘管實現使用一個或多個EIP的集成解決方案的可能性很大,但Camel試圖在您的代碼庫中使用XML,Java,Groovy或Scala之一來執行此操作。

Camel通過豐富的DSL和路由機制支持本書中列出的所有企業集成模式。

因此,駱駝是其他EAI工具的競爭技術,更好地支持測試您的集成代碼。 由於域特定語言(DSL),代碼簡潔。 它甚至可以被商業用戶閱讀,而且它是免費的並且使您的工作效率更高。





java singleton