EnumでStateパターン的なものの真似
Enumについて調べてたら面白い使い方が紹介されていたので真似してみました。
J2SE 5.0 Tiger 虎の穴 Typesafe Enum
package en1; public enum Signal { BLUE { @Override public Signal next() { return YELLOW; } @Override public void doSomething() { System.out.println("blue doSomething"); } }, YELLOW { @Override public Signal next() { return RED; } @Override public void doSomething() { System.out.println("yellow doSomething"); } }, RED { @Override public Signal next() { return BLUE; } @Override public void doSomething() { System.out.println("red doSomething"); } }; abstract Signal next(); abstract void doSomething(); public static void main(String[] args) { Signal signal = BLUE; signal.doSomething(); // => blue doSomething signal.next().doSomething(); // => yellow doSomething signal.next().next().doSomething(); // => red doSomething signal.next().next().next().doSomething(); // => blue doSomething } }
で、考察。
Enumはabstarctメソッドを定義できるってのがまず新鮮でした。
各定数ごとにメソッドを実装できるのが面白いです。
上記のサンプルは信号機をイメージして、青=>黄=>赤=>青・・・と状態を変化させています。
(nextメソッドで次の状態を返すようにしています)