【发布时间】:2011-01-07 08:15:01
【问题描述】:
我正在尝试在 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{
// ...
}
但是,我不希望 createBlueCar 和 createRedCar 可供公众使用,如果我没有在 .h 文件中定义它们,则会收到缺少定义的警告。
我是一名前 Java 开发人员,也是 Objective-C 的新手——所以这可能只是不好的做法如果是这样,那么这样做的好做法是什么。
【问题讨论】:
-
Objective-C 中通常没有工厂类,因为类是第一类对象。查看 Umbrella 类,例如 NSPredicate 或 NSNumber。他们是工厂。您通常会返回一个 NSPredicate 或 NSNumber 的子类。
-
同意@AdamSmith,最好的方法是 Car 上的类方法,例如
+(Car *)carWithColor:(int)color; -
实际上,我注意到另一件事,从 Java 来时可能不清楚。如果“createCar”在 CarFactory 类上,最佳实践通常是编写 [self createBlueCar]。在 ObjC 中,类是与 Java 不同的对象。所以类方法中的 self 指的是类对象(在本例中为 CarFactory)。使用“self”的原因是如果你继承“CarFactory”并重新实现例如代码不会中断。 “createBlueCar”
标签: objective-c