2012-02-23 38 views
0

我有一個隊列,應該由一些類使用。更好的想法比單身人士使用全局變量

它是所有類的同一個隊列,所以我想也許我會把隊列在靜態類的靜態成員。 但我明白這不是那麼好OOP(雖然我認爲單是設計方案的一個) 所以我想一個想法實現這個隊列, 我會需要它是唯一的和可訪問所有的課因爲所有的類都使用相同的隊列。

+1

您使用的是IoC容器嗎? – 2012-02-23 10:29:37

+0

創建一個包含Queue(或ConcurrentQueue)的singletone類,並在您的類中公開所有需要的功能。 – Maxim 2012-02-23 10:32:27

回答

2

你說的是你的類共享一些上下文,並且這個上下文包含一個隊列。我們可以說你的課程取決於這個背景。

的緣由,單例模式是不是一個好主意,是因爲它使用了全局(靜態)上下文共同環境。這是限制的原因有兩個:

  1. 這是不容易清楚地確定你的類的依賴關係,因此不容易對它們進行設置在不同環境下(比如單元測試環境)。

  2. 這是完全不可能有這種背景下並排運行側的兩個實例。

因此,一個簡單的解決方案是將您的類的所有依賴關係放入上下文類中,然後將所有類與此類的實例關聯。

另一個更高級的解決方案是使用依賴注入框架。

+0

我認爲DI框架不如您提出的解決方案複雜。當然。這是一個需要掌握的新概念,但它會產生更清晰的代碼。 – jgauffin 2012-02-23 13:15:06

1

我不會讓一個Singleton,因爲這將是在你的程序的所有類和層次全局可見。給需要訪問隊列的部分引用隊列本身。所以你清楚地確定你的軟件的哪一部分可以訪問它。

我有軟件項目,其中在它有太多的單身又名「XyzManager」,因爲他們是從軟件的任何部分在野生的方式使用非常糟糕的經歷。儘量避免使用全局變量和單例。最好給你的對象引用他們應該訪問的東西。