应用程序设计 - 谁应该拥有一个单例对象

时间:2012-08-30 02:35:40

标签: objective-c cocoa design-patterns

在我基于文档的应用程序中,我有一个AppController,用于处理打开Prefs,About面板等。我也有一个单例类;因为它基本上是一个传递的全局对象,谁应该拥有它?使用它的对象还是我的AppController?我读到的一些文章说你应该有一个“中心”位置 - 比如一个委托,其他人说这是糟糕的设计,只有一个使用X类的对象应该拥有X类。你有什么看法?

3 个答案:

答案 0 :(得分:2)

没有真正拥有单例的因为它存储在这样的静态变量中:

static Globals *sharedGlobals = nil;

@implementation Globals

+ (Globals *) sharedGlobals {
    if (!sharedGlobals) sharedGlobals = [[Globals alloc] init];
    return sharedGlobals;
}

第一次调用sharedGlobals方法时,单例将由称为它的任何类创建。谁先调用它并不重要。

答案 1 :(得分:0)

我认为单例对象在第一次分配后才存在于内存中,它不应该由任何对象拥有。

答案 2 :(得分:-1)

您不应该使用单例作为定义全局对象的方法,单例模式旨在提供一种方法来确保一个上下文中的唯一实例。但问题是如果你不使用依赖注入框架并通过java实现它,用于实现模式的静态方法允许所有应用程序类自由访问singlenton。所以它是一种开始销毁你自己的模块/应用程序设计的方法(如果你没有正确控制它)。

在你决定使用或不使用单身人士模式(反对和亲)之前,先看看这些帖子: