1. 程式人生 > >多路分發之EnumMap

多路分發之EnumMap

話不多說,先上程式碼。

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