iOS:使用工厂设计模式动态更改可访问属性?
<p><p>我有以下示例,其中 <code>CarTypeTesla</code> 是一个枚举值。</p>
<pre><code>Car *car = ;
</code></pre>
<p><code>+ (instanceType)carOfType:</code> 进行枚举检查并返回给定 <code>Car</code> 子类的实例,如下所示:</p>
<pre><code>+ (instanceType)carOfType:(CarType)carType {
switch (carType) {
case: CarTypeTesla: {
return [ init];
}
case: CarTypeMustang: {
return [ init];
}
}
}
</code></pre>
<p>这样就可以在主文件中完成类似的操作(而且我不必公开我的 Tesla、Mustang 和其他 20 个子类):</p>
<pre><code>Car *car = ;
NSLog(@"%@", car.batteryChargeRemaining);
</code></pre>
<p>或</p>
<pre><code>Car *car = ;
NSLog(@"%@", car.gasFuelRemaining);
</code></pre>
<p>我怎样才能使用这个工厂设计模式,根据提供的枚举值仅显示与返回的子类相关的属性/方法(使用时不想显示 <code>-(float)gasFuelRemaining</code> <code>CarTypeTesla</code>?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您所实现的在 iOS 中被称为类集群。一些框架类,如 NSArray、NSString 和 NSDictionary 就是这样工作的(它们通过根据它们持有的数据量提供不同的解决方案进行优化)。这允许您拥有一个向 API 公开的通用通用类,同时隐藏与开发人员不一定相关的解决方案的所有复杂细节,包括基于上下文不同但行为相同的解决方案。这意味着您有一个通用基类,其中包含在所有其他隐藏类中实现的通用方法。</p>
<p>在我看来,您必须选择:
1 - 您在所有汽车类中实现所有方法,并在它们不相关时让它们返回空值,在这种情况下,您的 <code>Tesla</code> 实例将为 <code>gasFuelRemaining</code> 返回 0 或
2 - 您为不同类型的汽车实现协议(protocol),例如 <code>ElectricCarProtocol</code> 和 <code>FuelCarProtocol</code> 并在您的 <code>Car</code> 类中有一个通用方法,称为 <code>fuelRemaining </code> 做一些类似这样的事情:</p>
<pre><code>if () {
return self.batteryChargeRemaining; // you might need to cast the object here
}
return self.gasFuelRemaining; // idem
</code></pre>
<p>希望这会有所帮助!</p></p>
<p style="font-size: 20px;">关于iOS:使用工厂设计模式动态更改可访问属性?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/30368308/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/30368308/
</a>
</p>
页:
[1]