【发布时间】:2013-12-06 16:13:58
【问题描述】:
我遇到过一些以枚举形式编写的状态机示例。例如:
public enum State {
INITIAL {
@Override
public State process(char ch) { return MIDDLE; }
},
MIDDLE {
@Override
public State process(char ch) {
switch (ch) {
case 'a': return INITIAL;
default: return FINAL;
}
}
},
FINAL {
@Override
public State process(char ch) { return FINAL; }
};
public abstract State process(char ch);
public static State initial() { return INITIAL; }
}
我关心的是让常量相互了解。 它们的实现可能会发生变化,如果添加(或删除)常量,则意味着更多的变化。
但是,所有更改都包含在枚举中,除非外部代码直接引用常量并对转换表做出假设。
那么,这段代码是高度耦合、松耦合还是主观?
【问题讨论】:
-
是的,我可以看到一个单独的类保存状态转换的逻辑,而不是包含在枚举中。
-
@GriffeyDog 枚举可以是私有的,并嵌套在某个代表状态机适当实例的类中。所以,我认为这是做事的简写版本,在任何严肃的代码中都可能不是一个好习惯。
标签: java enums decoupling