擅长:python、mysql、java
<p>叹息。对问题的错误部分过分紧张。switch语句不是问题所在。有很多表达“另类”的方法,但没有添加含义。</p>
<p>问题是<strong>意思是</strong>--不是技术声明的选择。</p>
<p>有三种常见的模式。</p>
<ul>
<li><p><strong>将键映射到对象。如果字典几乎完全是静态的,并且在一个简单的键和另一个更复杂的键之间有映射,请使用字典。每次你需要的时候都在忙着编字典是愚蠢的。如果这是您的意思,您可以使用它:您的“条件”是映射到对象的简单静态键值。</p></li>
<li><p><strong>子类之间的变体行为</strong>。使用多态性而不是类型检查对象。对的。如果在多个具有不同行为的类中有相似的对象,则它们应该是多态的。尽可能经常使用这个。</p></li>
<li><p><strong>其他变体行为</strong>。使用if elif else梯子。当您没有基本的静态键到值映射时,请使用此选项。当条件复杂时,或者您的<strong>平均值</strong>过程,而不是对象时,请使用此选项。</p></li>
</ul>
<p>其他的一切都是复杂的代码,可以达到类似的效果。</p>
<p>使用元组。这只是没有映射的字典。这需要搜索,应尽可能避免搜索。别这样,效率很低。使用字典。</p>
<p>使用函数装饰符(<a href="http://code.activestate.com/recipes/440499/" rel="noreferrer">http://code.activestate.com/recipes/440499/</a>)。恶心。这隐藏了你正在解决的问题的本质。不要这样做,这并不明显,选择是<em>排他</em>。用别的什么。</p>
<p>有人甚至推荐了访客模式。如果对象遵循<strong>组合设计模式,请使用此选项。这取决于多态性的工作,所以这并不是一个真正不同的解决方案。</p>