我在我的应用程序中使用此代码,我发现它非常难看.这样做有一种聪明的方法吗?
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) {
}
}
Run Code Online (Sandbox Code Playgroud)
我的目标是处理包含在枚举列表中的所有应用程序类别枚举.
您可以做的最少是声明处理依赖于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
}
}
}
Run Code Online (Sandbox Code Playgroud)
只有在您不需要任何外部信息来处理枚举值时,此解决方案才可行.
请记住,您还可以向枚举值添加字段.
编辑
如果需要,您还可以实施策略设计模式.首先,定义策略接口和一些具体实现.
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...
}
}
//...
Run Code Online (Sandbox Code Playgroud)
然后,您可以修改枚举以使用上述策略.
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 */);
}
}
Run Code Online (Sandbox Code Playgroud)
显然,上面的代码只是一个草图.
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |