2011-08-09 49 views

回答

4

一個類實例化多少次不應該由類本身決定,而應該由提供單實例的基礎結構決定。 Singleton使得這個決定不可能離開基礎設施。這是一個可重用性問題,例如在單元測試中出現,而且當基礎架構試圖爲特定目的提供另一個實例時。

(如只有一個數據庫連接。但是從另一個數據庫導入數據,它需要另一個連接。如果數據庫接入服務將是一個單身,這是不可能打開另一個連接。)

2

單元模式讓單元測試更加困難,因爲它將全局狀態引入到應用程序中。

還應該注意的是,這種模式降低了程序內並行的可能性,因爲在多線程上下文中對單例的訪問必須被序列化,例如通過鎖定。

依賴注入的倡導者會認爲這是一種反模式,主要是由於它使用私有和靜態方法。

一些人提出了使用諸如Java或PHP等語言反射的方法來分解單例模式的方法。

0

的原因可能是他們」基本上就是global variables。即便如此,它們在一些環境中被廣泛使用。例如,在長時間運行的Web服務中。例如,在JavaSpring Framework中,默認的bean類型是單例,並且通常控制器,服務和對象都是單例(就是說框架只實例化一個實例)。它們不需要鎖定,也是線程安全的,因爲按照慣例它們不包含狀態。通常會傳入一個請求上下文,並且控制器/服務/ DAO將對此進行操作。

相關問題