恥ずかしながら、今までデザインパターンはかい摘んだだけでしっかりと勉強したことがなかったので、ここらでしっかり学んで置こうと思い、増補改訂版Java言語で学ぶデザインパターン入門を読んでいる。GOFは挫折しそうな気がするので。
そもそも情報系学科で四年間のうち一度もデザインパターンを学ぶ機会ないってのはいかがなものか。就職活動の負のスパイラルのせいで就職予備校という謎の方向に進んでしまっている大学。就職予備校と開き直ったとしても、授業カリキュラムにデザインパターンは必須なのでは?
とまぁ無駄な話はここまでで、まずはIteratorパターン。
で、本ではIteratorインターフェースを下のように定義している。
public interface Iterator { public abstract boolean hasNext(); public abstract Object next(); }
しかしここで疑問。Javaにはjava.util.Iteratorがあるからだ。
Iteratorインターフェースを新たに定義する必要あるのかぐぐってみたらこんな記事が。
どうやら本がJava5以前の内容だからこうなっているらしい。
java.uril.IteratorでIteratorインターフェースを実装する。java.util.Iteratorの実装ではremoveメソッドが必要になるので、下のように形だけのremoveメソッドを追加。
@Override public void remove() { throw new UnsupportedOperationException(); }
こうしたら今度Aggregateインターフェースもいらなくなるんだけど、そこはIterableインターフェースで代用できる。Iterableインターフェースで実装したクラスには拡張for文が使用できる。