比单身人士更好的想法用于全局变量

时间:2012-02-23 10:27:06

标签: c# oop design-patterns singleton

我有一个应该由某些类使用的队列。

它是所有类的相同队列所以我想也许我会将队列作为静态成员放在静态类中。 但我明白这不是那么好OOP。(虽然我认为单身是设计模式之一) 所以我想要一个实现这个队列的想法, 我将需要它是唯一的并且可以被所有类访问,因为所有类都使用相同的队列。

2 个答案:

答案 0 :(得分:2)

你说的是你的类共享一些上下文,这个上下文包含一个队列。我们可以说你的课程取决于这个背景。

单例模式不是一个好主意的原因是因为它使用全局(静态)上下文作为公共上下文。这有两个原因:

  1. 要清楚地识别类的依赖关系并不容易,因此在不同的环境(例如单元测试环境)下设置它们并不容易。

  2. 将此上下文的两个实例并排运行是完全不可能的。

  3. 因此,一个简单的解决方案是将类的所有依赖项放在上下文类中,然后将所有类与此类的实例链接起来。

    另一个更高级的解决方案是使用依赖注入框架。

答案 1 :(得分:1)

我不会将它变成Singleton,因为这对程序中的所有类和层都是全局可见的。为需要访问队列的部分提供对队列本身的引用。因此,您可以清楚地确定您的软件的哪个部分可以访问它。

我对软件项目的经验非常糟糕,因为它们以疯狂的方式从软件的任何部分使用,其中包含太多的单例“XyzManager”。如果可以,尽量避免全局变量和单身人士。最好将对象引用到他们应该访问的内容中。