我想创建具有以下属性的Car,Vehicle和Airplane类:
我更喜欢任何特定的设计模式?特别是对于Vehicle的initWithString和/或newVehicleWithString方法。
答案 0 :(得分:4)
您需要的是“类群集”模式。您的Vehicle initWithString:
方法可能如下所示:
- (id) initWithString:(NSString *)mode {
// note that we don't call [super init] in a class cluster.
// instead, we have to release self because it's an unwanted Vehicle instance
[self release];
if([mode isEqualToString:@"wheels"]) {
return [[Car alloc] initWithString:@"wheels"];
}
if([mode isEqualToString:@"wings"]) {
return [[Airplane alloc] initWithString:@"wings"];
}
return nil; //alternately, raise NSInvalidArgumentException
}
答案 1 :(得分:0)
引用超类中的子类不是一个好主意。
如果你真的必须这样做,你至少应该采用像vehicleWithString:
这样的类方法。
事实上,我怀疑另一种方法(使用vehicle initWithString:
创建汽车或飞机的实例)会起作用。