gpt4 book ai didi

java-8 - java防止了很多if并用设计模式替换它

转载 作者:行者123 更新时间:2023-12-01 07:52:37 25 4
gpt4 key购买 nike

我在我的应用程序中使用此代码,我发现它非常难看。
有这样做的聪明方法吗?

for (final ApplicationCategories applicationCategorie : applicationCategories) {
if (applicationCategorie == ApplicationCategories.PROJECTS) {
// invoke right method
} else if (applicationCategorie == ApplicationCategories.CALENDAR) {
// ...
} else if (applicationCategorie == ApplicationCategories.COMMUNICATION) {

} else if (applicationCategorie == ApplicationCategories.CONTACTS) {

} else if (applicationCategorie == ApplicationCategories.DOCUMENTS) {

} else if (applicationCategorie == ApplicationCategories.WORKINGBOOK) {

}
}

我的目标是处理包含在枚举列表中的所有应用程序类别枚举。

最佳答案

您至少可以声明处理依赖于 enum 的行为的方法。里面 ApplicationCategories .这样,如果您将向枚举添加新值,您只会更改与枚举相关的代码。

这样,您的代码就遵循了开放封闭原则,因此更易于维护。

enum ApplicationCategories {
PROJECTS,
CALENDAR,
// And so on...
WORKINGBOOK;

public static void handle(ApplicationCategories category) {
switch (category) {
case PROJECTS:
// Code to handle projects
break;
case CALENDAR:
// Code to handle calendar
break;
// And so on
}
}
}

仅当您不需要任何外部信息来处理枚举值时,此解决方案才可行。

请记住,您还可以将字段添加到枚举值。

编辑

如果需要,您还可以实现策略设计模式。首先,定义一个策略接口(interface)和一些具体的实现。
interface CategoryStrategy {
void handle(/* Some useful input*/);
}
class ProjectStrategy implements Strategy {
public void handle(/* Some useful input*/) {
// Do something related to projects...
}
}
class CalendarStrategy implements Strategy {
public void handle(/* Some useful input*/) {
// Do something related to calendars...
}
}
//...

然后,您可以修改您的枚举以使用上述策略。
enum ApplicationCategories {
PROJECTS(new ProjectStrategy()),
CALENDAR(new CalendarStrategy()),
// And so on...
WORKINGBOOK(new WorkingBookStrategy());

private CategoryStrategy strategy;
ApplicationCategories(CategoryStrategy strategy) {
this.strategy = strategy;
}

public static void handle(ApplicationCategories category) {
category.strategy.handle(/* Some inputs */);
}
}

显然,上面的代码只是一个草图。

关于java-8 - java防止了很多if并用设计模式替换它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42106583/

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