gpt4 book ai didi

java - 如何通过多态性消除这个特定的 SWITCH 语句

转载 作者:行者123 更新时间:2023-12-01 16:57:59 24 4
gpt4 key购买 nike

我有一个 switch 语句,该语句在向用户显示要执行的操作列表并单击其中之一后执行。我们开启的是action ID

switch (actionId) {
case 0:
openEditProductScreen();
break;
case 1:
startDeleteProductOperation();
break;
case 2:
//nothing
break;
case 3:
openAddProductScreen();
break;
}

我读过一些关于用多态性替换开关的文章,但它们涉及另一种类型的问题 - 以不同的方式做同样的事情(支付不同类型员工工资的方式),但是当我想触发时我该怎么办一组完全不同的操作?

想一想,我真的需要消除这种特殊类型的 switch 语句吗?我的意思是,它具有可读性和逻辑性。如果我以某种方式消除它会有什么好处?

编辑:

这就是你的意思吗?

private Map<Integer, ProductRelatedAction> productRelatedActions = new HashMap<Integer, ProductRelatedAction>();

private void mapActionsToIds() {
productRelatedActions.put(0, new EditProductAction());
productRelatedActions.put(1, new DeleteProductAction());
// remainder omitted
}

private abstract class ProductRelatedAction{
abstract void execute();
}

private class EditProductAction extends ProductRelatedAction{
@Override
void execute() {
openEditProductScreen();
}
}

private class DeleteProductAction extends ProductRelatedAction{
@Override
void execute() {
startDeleteProductOperation();
}
}

最佳答案

在Action类中添加一个抽象方法execute(),创建Action的4个子类,重写execute()。让第一个执行 openEditProductScreen(),第二个执行 startDeleteProductOperation(),等等

然后创建这 4 个类的一个实例,并让用户选择这 4 个实例之一。当用户选择操作后,调用 selectedAction.execute()

你应该用多态性来代替这种开关吗?我认为:是的。当您必须添加另一个操作时,您不可能忘记在新子类中实现execute() 方法:如果没有它,您的代码将无法编译。另一方面,忘记在 switch 语句中添加 case 是非常容易的事情。我什至没有提到 switch 语句的失败问题。

关于java - 如何通过多态性消除这个特定的 SWITCH 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30152849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com