话不多说,先上代码。
package cn.pconline.枚举.多路分发;
import java.util.EnumMap;
import java.util.Map;
public enum State {
液体,气体,固体;
static EnumMap<State, Map<State, Transition>> enumMap;
enum Transition{
凝固(液体,固体),
汽化(液体,气体),
凝华(气体,固体),
液化(气体,液体),
融化(固体,液体),
升华(固体,气体);
private Transition(State src,State dst){
this.src =src;
this.dst = dst;
}
private State src;
private State dst;
public State getSrc() {
return src;
}
public void setSrc(State src) {
this.src = src;
}
public State getDst() {
return dst;
}
public void setDst(State dst) {
this.dst = dst;
}
}
static {
enumMap =
new EnumMap<State, Map<State,Transition>>(State.class);
for (State state : State.values()) {
enumMap.put(state, new EnumMap<State, State.Transition>(State.class));
}
for (Transition transaction : Transition.values()) {
enumMap.get(transaction.getSrc()).put(transaction.getDst(), transaction);
}
}
/**
* 测试方法
*/
public static void main(String[] args) {
System.out.println(State.enumMap.get(固体).get(液体));
System.out.println(State.enumMap.get(液体).get(固体));
System.out.println(State.enumMap.get(气体).get(固体));
System.out.println(State.enumMap.get(固体).get(气体));
}
}
运行结果:
上面这段代码描述的是多路分发之两路分发的一种情况,为什么叫多路分发呢。看这张图,也许你就明白了。物质有液体、固体、气体三种状态,每种状态又可以向其他状态转换,每种装换过程我们称之为Transaction。
两路分发其实描述的是一张“表”内的数据对应关系:
液体 | 固体 | 气体 | |
---|---|---|---|
液体 | X | 凝固 | 汽化 |
固体 | 融化 | X | 升华 |
气体 | 液化 | 凝华 | X |