2011-09-13 6 views
0

Possible en double:
What's the correct method to subclass a singleton class in Objective -C?design pattern Singleton

@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 

Maintenant, si loin, si good.Actually, la partie init devrait être privé. Mais je m'en soucierai plus tard.

Maintenant, disons que je veux sous-classer la classe singleton. Comment dois-je le modifier?

permettent également de voir le code ici:

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

je modifier que pour

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

Alors que la méthode singleton renvoient toujours la sous-classe plutôt que la classe parente

Eh bien, je a obtenu l'erreur de compilation

Maintenant je sais qu'une sous-classe est un "parent" . Donc, sous-classer un singleton n'a pas de sens.

Que se passe-t-il si je n'ai pas besoin d'un singleton strict?

Je veux

@interface CLASSA: singleton @interface ClassB: Singelton

à tous ont une méthode singleton qui se réfèrent à une seule instance de CLASSA et ClassB?

+2

est donc votre question (et donc le titre) mieux déclaré que « Comment créer un singleton qui peut être sous-classé ? " ou "Comment sous-classer un singleton?"? – jball

+0

Si vous le sous-classez, ce n'est plus un singleton ... un enfant IS-Un parent. – duffymo

+1

duplication possible de [Quelle est la méthode correcte pour sous-classer une classe singleton dans Objective -C?] (Http://stackoverflow.com/questions/3394033/whats-the-correct-method-to-subclass-a-singleton-class -in-objectif-c). Aussi: http://stackoverflow.com/questions/1605083/how-do-i-make-other-classes-derive-from-a-singleton-class/1605127#1605127 –

Répondre

2

Comme le mentionne duffymo dans ses commentaires sous-classement un singleton n'a pas de sens. Laissez-moi essayer d'expliquer. Imaginons que vous fassiez deux sous-classes différentes héritant toutes deux de votre classe de base singleton. Lorsque vous les appliquez, seul le premier crée réellement une instance (car c'est le point d'un singleton). La seconde instance de sous-classe ne sera pas instanciée. Cependant, la fonctionnalité ajoutée dans les sous-classes sera instanciée dans chaque sous-classe séparée. Il se fait en désordre que vous pourriez voir :-)

Hope this helps ...

Cordialement

+0

Oui, comme le souligne Georg Fritzche dans son commentaire ci-dessus, le double a une explication assez similaire. – KlausCPH