【问题标题】:better Idea than singleton to use for global variable比单例更好的想法用于全局变量
【发布时间】:2012-02-23 18:39:42
【问题描述】:

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

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

【问题讨论】:

  • 你在使用 IoC 容器吗?
  • 创建一个包含队列(或 ConcurrentQueue)的单例类,并在您的类中公开所有需要的功能。

标签: c# oop design-patterns singleton


【解决方案1】:

你说的是你的类共享一些上下文并且这个上下文包含一个队列。我们可以说你的类依赖于这个上下文。

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

  1. 你的类的依赖关系不容易明确,因此在不同的环境下(比如单元测试环境)也不容易设置。

  2. 完全不可能同时运行此上下文的两个实例。

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

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

【讨论】:

  • 我认为 DI 框架没有您提出的解决方案复杂。当然。这是一个需要掌握的新概念,但它会产生更简洁的代码。
【解决方案2】:

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

我在软件项目中遇到了非常糟糕的经历,这些项目中有太多的单例,也就是“XyzManager”,因为它们在软件的任何部分都被疯狂地使用。如果可以的话,尽量避免使用全局变量和单例。更好地为您的对象提供他们应该有权访问的内容的引用。

【讨论】:

    猜你喜欢
    • 2017-12-30
    • 2013-02-18
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多