所以我有一个看起来像这样的Java类:
class CalendarEntry {
private char type;
private char status;
...
public void myMethod() {
switch (type) {
...
}
}
public String myOtherMethod() {
switch (status) {
...
}
}
// and so on
}
类型和状态是两个不同的属性/标志。两者都可以有超过3种不同的条件设置。
如果我只有这些“标志”之一,我可以轻松地使用多态重构代码并删除所有swtich情况以及if else阻止真正使代码变得一团糟的问题。
但是现在我有两个完全不同的标志来自> = 3x3不同的条件。重构这种代码的最佳方法是什么?
答案 0 :(得分:1)
如果您有真实的状态和类型,那么您可以应用下一个逻辑。类主要是类型的反射,具有一些取决于类型的行为和属性。 (例如Animal
,Cat extends Animal
和Dog extends Animal
)。状态会说明该类型,例如Status.AWAKE
,Status.SLEEPING
。状态不会改变类的类型,而是改变它的一些行为。
所以:
type
是多态性的优秀候选者(如果它真的表示一种类型)
status
应该是一个存在于所有子类中的枚举/其他类。状态没有说明正在谈论的事情。
每个子类都可以实现自己的myOtherMethod
,或者,如果基于状态的方法始终相同,则在超类中实现它。
另一方面,如果type
和status
(及其行为)没有任何共同点,那么它们应该是单独的类,彼此之间没有任何关系。但从问题中推断我认为它们在某种程度上是相关的。