Estoy tratando de crear una fábrica (patrón de diseño) en Objective C Así que estoy haciendo algo como:fábrica (patrón de diseño) en 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{
// ...
}
Sin embargo, yo no quiero que el createBlueCar
y el createRedCar
para estar disponible para el público y, si no los defino en el archivo .h
, recibo una advertencia de la definición faltante.
Soy un antiguo desarrollador de Java y un novato en Objective-C. Por lo que podría ser una mala práctica. De ser así, qué buena práctica es hacerlo.
Normalmente no tiene clases de fábrica en Objective-C ya que las clases son objetos de primera clase. Mire las clases de paraguas tales como NSPredicate o NSNumber. Son fábricas. Por lo general, obtendrá una subclase de NSPredicate o NSNumber devuelta. –
De acuerdo con @AdamSmith, la mejor manera de hacerlo sería un método de clase en automóvil, p. Ej. '+ (Car *) carWithColor: (int) color;' – dmur
De hecho, noté otra cosa que podría no estar clara al venir de Java. Si "createCar" está en la clase de CarFactory, la mejor práctica es escribir [self createBlueCar]. En ObjC las clases son objetos a diferencia de Java. Entonces self en un método de clase se refiere al objeto de clase (CarFactory en este caso).La razón para usar "self" es que el código no se romperá si hereda "CarFactory" y vuelve a implementar, p. "createBlueCar" –