对于策略或类似模式,是否存在switch(case)是一个很好的设计选择(除了简单性)的实例......
答案 0 :(得分:25)
在测试基元的值时使用开关。 (即整数或字符)。
在不同的类型中选择时使用多态。
示例: 测试用户输入的字符是“a”,“b”还是“c”之一是交换机的作业。
测试您正在处理的对象是狗还是猫是多态分派的工作。
在许多语言中,如果您有更复杂的值,您可能无法使用Switch。
答案 1 :(得分:16)
首先,Simplicity通常是一个很好的设计选择。
我从未理解这种对开关/案例的偏见。是的,它可以被滥用,但是,所有其他编程结构也是如此。
打开一个类型通常是错误的,可能应该被多态替换。打开其他东西通常都可以。
答案 2 :(得分:5)
一,可读性。
答案 3 :(得分:5)
是的,当然。很多时候,你的开关只与整体逻辑的一小部分相关,而且只是为了产生这种微小的影响而创建全新的类是错误的。
例如,假设您有一个单词数据库,用户输入另一个单词,并且您希望在数据库中找到该单词但包含可能的复数形式。你可以写一些像(C ++)
的东西
vector<string> possible_forms;
possible_forms.push_back(word);
char last_letter = word[word.size() - 1];
switch (last_letter) {
case 's':
case 'i':
case 'z':
possible_forms.push_back(word + "es");
break;
case 'y':
possible_forms.push_back(word.substr(0, word.size() - 1) + "ies");
break;
default:
possible_forms.push_back(word + "s");
}
用策略做这件事会有点过分。
答案 4 :(得分:1)
通常没问题,只要你在一个的地方只有一个开关。如果你有多个(或多个),那么也是时候考虑其他选择了。
答案 5 :(得分:0)
可以使用开关创建“策略”。
这可能是起点,从那里让多态性完成这项工作。
其他需要考虑的灵活性需要额外的速度。有案例。
答案 6 :(得分:-2)
否,在简单的情况下,switch语句可能只是一个很好的设计选择。
一旦通过简单的情况,切换语句就会变得非常痛苦,无法继续更新和维护。这是设计模式产生的部分原因。
答案 7 :(得分:-4)
我认为开关总是错误的:
案例正文是代码而是行为, 因此,案例中的事物('价值')具有行为类型, 因此,多态性将是一个更好的选择。
这意味着值实际上是类型,例如数字1是一种在某种程度上等于1的所有东西。剩下的就是让我们将1-ness映射到我们特定情况的行为,并且我们对所有其他类型(一件好事)都有多态性。
在某些语言中,这比其他语言更容易完成,遗憾的是,大多数常用的语言非常糟糕,因此阻力最小的路径是错误的,人们最终会编写switch或if语句(同样的事情)。 / p>