是否存在switch(case)是战略或类似模式的良好设计选择(简单除外)的情况......
在测试基元值时使用开关.(即整数或字符).
在不同类型之间进行选择时,请使用多态性.
示例:测试用户输入的字符是"a","b"还是"c"之一是交换机的作业.
测试您正在处理的对象是Dog还是Cat是多态分派的工作.
在许多语言中,如果您有更复杂的值,您可能无法使用Switch.
首先,Simplicity通常是一个很好的设计选择.
我从来没有理解这种对开关/外壳的偏见.是的,它可以被滥用,但是,所有其他编程结构也是如此.
打开类型通常是错误的,可能应该被多态替换.打开其他东西通常都可以.
首先,可读性.
当然是.很多时候,你的开关只与你整体逻辑的一小部分相关,而且仅仅因为这个小的影响而创建全新的类是错误的.
例如,假设您有一个单词数据库,用户输入另一个单词,并且您希望在数据库中找到该单词但包含可能的复数形式.你可能会写类似(C++)的东西
vectorpossible_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"); }
用策略做这件事会有点矫枉过正.