今日の勉強
デザインパターンの種類は全部で23個。一ヶ月もあれば制覇できる。ただ、読むだけでは頭に入らないと思うので実際に書くようにする。
Iteratorパターンはループをまわす処理を実装に依存しないようにするパターン。つまり、どんな実装であろうと、その集合がなんであれ同じようにループをまわせるようにすること。
例えば次の要素が存在するかを判断するメソッドhas_next?と次の要素を取り出すnextメソッドの2つによって、どんな集合であろうと同じようにループをまわすことができるようになる。
サンプルソースをRubyで書いてみる。keyを持つkeyboardという集合を表します。
# key class class Key attr_reader :name def initialize(name) @name = name end end # keyboard class class Keyboard def initialize @keys = Array.new end def get_key_at(index) @keys[index] end def append_key(key) @keys << key end def get_length @keys.length end def iterator KeyboardIterator.new(self) end end # keyboarditerator class class KeyboardIterator def initialize(keyboard) @keyboard = keyboard @index = 0 end def has_next? @index < @keyboard.get_length end def next key = @keyboard.get_key_at(@index) @index += 1 key end end # main keyboard = Keyboard.new keyboard.append_key(Key.new('A')) keyboard.append_key(Key.new('B')) keyboard.append_key(Key.new('C')) keyboard.append_key(Key.new('D')) iterator = keyboard.iterator while iterator.has_next? key = iterator.next puts key.name end
Iterator.rd
こちらにはものすごい例が…
Rubyはいろんな書き方ができて楽しいですね!