Je suis en train de créer une usine (design pattern) dans l'objectif C Je fais quelque chose comme:Usine (design pattern) dans l'objectif 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{
// ...
}
Cependant, je ne veux pas le createBlueCar
et le createRedCar
pour être disponible au public et si je ne les définis pas dans le fichier .h
alors j'obtiens un avertissement de la définition manquante. Je suis un ancien développeur Java et un débutant en Objective-C - Donc ce n'est peut-être qu'une mauvaise pratique Si oui, quelle est la bonne pratique de le faire.
Vous n'avez généralement pas de classes Factory en Objective-C car les classes sont des objets de première classe. Regardez les classes Umbrella telles que NSPredicate ou NSNumber. Ce sont des usines. Vous obtiendrez généralement une sous-classe de NSPredicate ou NSNumber retourné. –
D'accord avec @AdamSmith, la meilleure façon de le faire serait une méthode de classe sur Car, par ex. '+ (Car *) carWithColor: (int) color;' – dmur
En fait, j'ai remarqué une autre chose qui pourrait ne pas être claire en venant de Java. Si "createCar" est sur CarFactory, la meilleure pratique consiste à écrire [self createBlueCar]. Dans les classes ObjC, les objets sont différents de Java. Ainsi, self dans une méthode de classe fait référence à l'objet de classe (CarFactory dans ce cas).La raison pour laquelle vous utilisez "self" est que le code ne se casse pas si vous héritez de "CarFactory" et réimplémentez par exemple. "createBlueCar" –