多路分發之EnumMap
阿新 • • 發佈:2018-11-13
話不多說,先上程式碼。
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 |