我試圖創建目標C 所以我做的東西像一個工廠(設計模式):廠(設計模式)的目標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中沒有Factory類,因爲類是第一類對象。查看Umbrella類,如NSPredicate或NSNumber。他們是工廠。您通常會得到NSPredicate或NSNumber返回的子類。 – 2014-02-14 12:39:25
同意@AdamSmith,最好的方法是在Car上使用類方法,例如'+(Car *)carWithColor:(int)color;' – dmur 2014-07-09 00:12:24
其實我注意到另一件事情,從Java來的時候可能並不清楚。如果CarFactory類中的「createCar」最佳實踐通常是編寫[self createBlueCar]。在ObjC類中是不同於Java的對象。因此,類方法中的self引用類對象(本例中爲CarFactory)。使用「self」的原因是,如果繼承「CarFactory」並重新實現,代碼不會中斷。 「createBlueCar」 – 2014-07-09 10:51:51