Singleton类与具有静态成员的类

尽管关于这个话题有许多线索,但我仍不清楚何时选择哪种方法。 我希望通过讨论一个具体的例子,我会最终“得到它”。

注意:我的语言是Cocoa,虽然一般问题不是语言特定的。

我有一个TaskQueue类,我想用它来:

  • 从我的代码中的任何地方访问,以添加或删除计划的任务
  • 定期自动处理计划任务
  • 当第一次使用TaskQueue时,我希望TaskQueue启动一个线程,然后定期唤醒以处理任务。

    显然,我至少需要两个变量:

  • 一个数组来存储任务
  • 处理任务的线程实例
  • 由于我只需要一个任务队列和一个线程来处理这些任务,因此我有两个选择:

  • 使TaskQueue成为单例类(例如使用CWL_DECLARE_SINGLETON_FOR_CLASS_WITH_ACCESSOR,如http://www.cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html中所述,我相信我将修改CWLSynthesisizeSingleton。 h文件在init时启动线程。)

  • 让任务数组和线程实例都是静态的(遵循以下建议的方法:如何在Objective-C中声明类级属性?)

  • 在这个特定情况下,是否明确有一种方法比另一种更好? 如果是这样,为什么?


    主要区别是简单的事情,如:

  • 与单身你可以绕过对象的委托和回调
  • 用一个单例你可以实现接口并派生它
  • 通过一个单例,你可以使用工厂模式来构建你的实例
  • 如果你不需要它们中的任何一个,就像必须在你的代码中访问全局功能一样,那么你可以使用静态方法。

    我个人更喜欢使用静态方法,除非我有明确的理由使用单例实例(例如具有通用接口但实现不同)。

    注意将静态方法重构为单例实例是一个非常简单的过程,所以如果你发现后者需要,你会很容易地重构它(然后你有C预处理器,一个#define就足够了)。

    链接地址: http://www.djcxy.com/p/13817.html

    上一篇: Singleton class vs. class with static member

    下一篇: When to use static classes in C#