菜鸟教程小白 发表于 2022-12-13 07:21:13

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(@&#34;%@&#34;, car.batteryChargeRemaining);
</code></pre>

<p>或</p>

<pre><code>Car *car = ;
NSLog(@&#34;%@&#34;, 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]
查看完整版本: iOS:使用工厂设计模式动态更改可访问属性?