我有以下示例,其中CarTypeTesla
是枚举值。
Car *car = [Car carOfType:CarTypeTesla];
+ (instanceType)carOfType:
执行枚举检查并返回给定Car
子类的实例,如下所示:
+ (instanceType)carOfType:(CarType)carType {
switch (carType) {
case: CarTypeTesla: {
return [[Tesla alloc] init];
}
case: CarTypeMustang: {
return [[Mustang alloc] init];
}
}
}
所以回到主文件中可以做到这样的事情(而且我不必暴露我的特斯拉,Mustang和其他20个子类):
Car *car = [Car carOfType:CarTypeTesla];
NSLog(@"%@", car.batteryChargeRemaining);
或
Car *car = [Car carOfType:CarTypeMustang];
NSLog(@"%@", car.gasFuelRemaining);
如何使用此工厂设计模式,仅根据提供的枚举值显示与返回的子类相关的属性/方法(在使用-(float)gasFuelRemaining
时不想显示CarTypeTesla
?< / p>
答案 0 :(得分:1)
您正在实施的内容在iOS中称为类集群。一些框架类,如NSArray,NSString和NSDictionary就是这样的(它们通过根据它们持有的数据量提供不同的解决方案来优化)。这允许您拥有一个暴露给API的通用公共类,同时隐藏与开发人员不一定相关的解决方案的所有复杂细节,包括基于上下文但行为相同的解决方案。这意味着你有一个通用的基类,其中包含在所有其他隐藏类中实现的通用方法。
我看到它的方式你必须选择:
1 - 您在所有汽车类中实现所有方法,并且当它们不相关时让它们返回空值,在这种情况下,image["xlink:href"]
实例将为Tesla
返回0或者
2 - 您为不同类型的汽车实施协议,例如gasFuelRemaining
和ElectricCarProtocol
,并在FuelCarProtocol
类中使用一种称为Car
的常用方法,该方法可以执行此操作:
fuelRemaining
希望这有帮助!