开发者

Singleton design pattern [duplicate]

开发者 https://www.devze.com 2023-04-04 09:15 出处:网络
This question already has answers here: Closed 11 years ago. Possible Duplicate: W开发者_Python百科hat's the correct method to subclass a singleton class in Objective -C?
This question already has answers here: Closed 11 years ago.

Possible Duplicate:

W开发者_Python百科hat's the correct method to subclass a singleton class in Objective -C?

@implementation Singleton

- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }

    return self;
}

+(Singleton *)singleton
{
    static Singleton * singleton;
    if (singleton == nil)
    {
        singleton =[[Singleton alloc]init];
    }
    return singleton;
}
@end

Now so far so good.Actually, the init part should be private. But I'll worry about that later.

Now, say I want to subclass the singleton class. How should I modify it?

Also let's see the code here:

+(Singleton *)singleton
{
    static Singleton * singleton;
    if (singleton == nil)
    {
        singleton =[[Singleton alloc]init];
    }
    return singleton;
}

I should modify that to

+(self *)singleton
{
    static self * singleton;
    if (singleton == nil)
    {
        singleton =[[self alloc]init];
    }
    return singleton;
}

So that the singleton method always return the subclass rather than the parent class

Well I got compile error

Now I know a subclass is a "parent". So subclassing a singleton doesn't make sense.

What about if I do not need a strict singleton.

I want

@interface classA: singleton @interface classB: singelton

to all have a singleton method that refer to a single instance of classA and classB?


As duffymo mentions in his comments subclassing a singleton doesn't make sense. Let me try to explain.

Let's say you make two different subclasses both inheriting from your singleton base class. When you instance each of them, only the first will actually create an instance (as this is the point of a singleton). The second subclass instance will not get instantiated. However, the functionality added in the subclasses will get instanced in each seperate subclass. It's getting messy as you might see :-)

Hope this helps...

Regards

0

精彩评论

暂无评论...
验证码 换一张
取 消