Sto cercando di creare una fabbrica (design pattern) in Objective C Così sto facendo qualcosa di simile:Factory (design pattern) in Objective C
+ (Car *)createCar:(int)color {
if (color == 1) {
return [CarFactory createBlueCar];
} else if (color == 2) {
return [CarFactory createRedCar];
} else {
return nil;
}
}
+ (Car *)createBlueCar {
// ...
}
+(Car*)createRedCar{
// ...
}
Comunque io non voglio che il createBlueCar
e lo createRedCar
deve essere disponibile al pubblico e se non li definisco nel file .h
, viene visualizzato un avviso relativo alla definizione mancante.
Sono un ex sviluppatore Java e un novizio in Objective-C - Quindi potrebbe essere solo una cattiva pratica Se è così, quale sia la buona pratica di farlo.
Di solito non si hanno classi Factory in Objective-C poiché le classi sono oggetti di prima classe. Guarda le classi Umbrella come NSPredicate o NSNumber. Sono fabbriche. Solitamente verrà restituita una sottoclasse di NSPredicate o NSNumber. –
Accetto con @AdamSmith, il modo migliore per farlo sarebbe un metodo di classe su Car, ad es. '+ (Car *) carWithColor: (int) color;' – dmur
In realtà ho notato un'altra cosa che potrebbe non essere chiara quando si proviene da Java. Se "createCar" è sulla classe CarFactory, la migliore pratica è di solito scrivere [self createBlueCar]. Nelle classi ObjC ci sono oggetti diversi da Java. Quindi self in un metodo di classe si riferisce all'oggetto di classe (CarFactory in questo caso).Il motivo dell'uso di "self" è che il codice non si interrompe se si eredita "CarFactory" e si reimplementa ad es. "createBlueCar" –