2

我想设置一个单例协议。实现该协议的类将支持 +(id) 单例

显然我会实现那个单例方法。一次又一次地重新实施同样的事情是一种浪费。

我可以使用继承,我已经知道该怎么做,但是一个类只能有一个父级,使用继承听起来有点矫枉过正。基本上我只会将单例存储在 NSMutableDictionary 中,其键是相应类的 NSStringFromClass。我想知道为什么没有人这样做。这与我在 Objective-c 中使用的技术相同,我们如何拥有一个范围是整个类的变量(但不包括子类)

#import "BGSuperSingleton.h"

static NSMutableDictionary * allTheSingletons;
@implementation BGSuperSingleton

+(id) singleton1
{
    NSString* className = NSStringFromClass([self class]);

    id result = allTheSingletons[className];

    if (result==nil)
    {
        result = [[[self class] alloc]init];
        allTheSingletons[className]=result;
    }
    return result;
}

@end

我可以使用类别。但是,类别几乎适用于任何课程。我可以限制我所有的单例都属于 SuperSingleton 类,但这会破坏目的

我可以使用协议。现在这太棒了。但是,协议没有实现。协议只声明一个类可以做的方法。

所以我该怎么做?

4

1 回答 1

3

所以我该怎么做?

你应该重新考虑你的设计。听起来您想在许多不同的类中采用此协议,以便您可以拥有每个类的共享实例。这些对象真的需要单例吗?共享对象和不能多次实例化的类之间存在区别。

考虑创建一个作为所有其他类的工厂的类。该类可以维护共享对象的字典,并且您可以简单地指出始终使用工厂来实例化其他类。实际上,您可以编写其他类,以便直接实例化它们会引发异常或其他东西。

于 2012-12-28T03:38:48.890 回答