Java 专用方法与使用枚举作为附加参数

Java 专用方法与使用枚举作为附加参数,java,api,Java,Api,Java设计问题 我有一个对象需要维护4种类型的小部件集:活动、非活动、无效和潜在。对于这些类型中的每一种,我都有一系列作用于它们的方法:比如add、get、remove等 我的问题是,有一系列这样的方法会更好吗: addInactive(Widget) getInactive() removeInactive(Widget) addActive(Widget) getInactive() removeInactive(Widget) addInvalid(Widget) 等等 或 我是否应该

Java设计问题

我有一个对象需要维护4种类型的小部件集:活动、非活动、无效和潜在。对于这些类型中的每一种,我都有一系列作用于它们的方法:比如add、get、remove等

我的问题是,有一系列这样的方法会更好吗:

addInactive(Widget)
getInactive()
removeInactive(Widget)
addActive(Widget)
getInactive()
removeInactive(Widget)
addInvalid(Widget)
等等

我是否应该在这个类中有一个枚举:WidgetStatus,然后当消费者需要执行操作时,他们会传入这个枚举。这将导致只有3种公共方法:

add(Widget, WidgetStatus)
get(WidgetStatus)
remove(Widget, WidgetStatus)
一方面,我喜欢第一种使用专门方法的方法,因为它不仅减少了所需参数的数量,而且还迫使消费者的手显式地调用他们需要的方法。然而,后一个选项似乎保持了API的简单性,并使将来添加额外的状态类型变得更容易


想法?

我会将enum或任何东西转化为某种策略模式,包括您上面提到的行为。然后,您的add/get/remove方法将简单地委托给策略来执行操作


WidgetStatus是小部件的属性,而不是容器。也许你会喜欢的

Widget.setActive(false);
add(Widget);

有了enum,如果你想改变状态,你可以得到一个更干净的API和更容易的维护;第一种方法确实没有充分的理由。

+1不要构建瑞士军刀-容器不必比绝对需要了解更多关于小部件API的信息(比如它们具有“状态”),我同意你的观点,但实际上小部件本身没有“状态”。这是一种记忆中的东西。无效、有效等是在运行时根据用户操作决定的。所以,这种方法不太可行。我也想过,但我认为策略模式可能会引入不必要的复杂性。添加/删除等基本上只是将条目放入/删除到集合中。战略模式在这里似乎有些过火。我采用了这种方法。我认为它包含了手头的需求,并使API更加简单。感谢大家的投入。