]> Panopticon :: Java :: enumでState

<< XFree86をインストールするmemo | main | 集合族 >>

enumでState

The Java Programming Language (Java Series)

The Java Programming Language, Fourth Editionをちびちび読んでいる。さっきChapter6 Enumeration Typesを読み終えた。enumの各要素にはメソッドが定義できるので、Stateパターンぽいことができる。

Time.java

public enum Time {
	MORNING {
		public void greet() {
			System.out.println("おはよう");
		}
		public Time next() {
			return DAYTIME;
		}
	},
	DAYTIME {
		public void greet() {
			System.out.println("こんにちは");
		}
		public Time next() {
			return NIGHT;
		}
	},
	NIGHT {
		public void greet() {
			System.out.println("こんばんは");
		}
		public Time next() {
			return MORNING;
		}
	};
	public abstract void greet();
	public abstract Time next();
}

Test.java

public class Test {
	public static void main(String[] args) {
		Time t = Time.MORNING;
		t.greet();
		t = t.next();
		t.greet();
		t = t.next();
		t.greet();
		t = t.next();
		t.greet();
	}
}

コンストラクタも使うとこんな感じになる。greet()は各enum要素内でオーバーライドすることもできるようだ。

Time.java

public enum Time {
	MORNING("おはよう") {
		public Time next(){
			return DAYTIME;
		}
	},
	DAYTIME("こんにちは") {
		public Time next(){
			return NIGHT;
		}
	},
	NIGHT("こんばんは") {
		public Time next(){
			return MORNING;
		}
	};
	String message;
	private Time(String message) {
		this.message = message;
	}
	public void greet() {
		System.out.println(message);
	}
	public abstract Time next();
}

学校の課題プログラムくらいならこれで十分だろう。Stateパターンを使えってところでこっちを使った場合、どういうことになるかは知らないが。

そういえば先日元バイト先の人と飲む機会があったのだが、情報系の専門学校の子が「javaをフローチャートで習ってる」と言っていた。僕はまず自分の耳とそして彼女の言葉を疑い、それってシーケンス図のことじゃないの、と何度も確認したがどうやら本当にフローチャートらしい。フローチャートって情報処理試験以外でも使われてるんだ、と少し感動した。

カテゴリ

Trackback URI

http://www.panopticon.jp/mt/mt-tb.cgi/38

Trackbacks(0)

コメントする