【发布时间】:2020-07-31 18:51:27
【问题描述】:
关于避免 switch 语句的一个常见论点是,如果有更改/添加,您将不得不查看代码中的 switch 语句受新选择影响的所有位置。 (你可能会忘记换一个)。
这听起来很有趣,但如果我使用其他构造,如函数指针(跳转表),如下所示:
[https://ultimatecourses.com/blog/deprecating-the-switch-statement-for-object-literals][1]
或这里
[https://simpleprogrammer.com/refactoring-switches-to-classes/][1]
当需要新的选择时,我也会遇到同样的问题。 所以..如果我有开关/选择,实现“开放/封闭原则”的最佳选择是什么?
我看到的唯一方法是使用而不是使用
switch(person.position){
case "manager":
break;
case "worker":
break;
case: "temp"
....
是将“John Smith”的整个 Person 对象输入一个函数,然后调用相应的函数。 switch 语句将在类中:
class Person {
...
...
public void applyBonus(){
switch (this.position) {
case "manager": this.addBonus(10000)
break;
}
}
如果现在请求任何更改,则仅在“Person”类中。
我做对了吗?
【问题讨论】:
-
如果添加另一个
Position,您将不得不更改源代码(即switch-语句)。另一种(更灵活)的方法是,例如,使用Chain-of-responsibility,其中可以动态注册新的处理程序。
标签: java c# oop switch-statement