ruby设计模式-迭代器模式
迭代器模式的作用是对外提供一组访问内部有序子集的接口方法
?
外部迭代器:
?
class ArrayIterator def initialize array @array = array @index = 0 end def has_next? @index < @array.length end def item @array[@index] end def next_item value = @array[@index] @index += 1 value end endarray = %w{"john" "julia"}iterator = ArrayIterator.new(array)while iterator.has_next? p iterator.next_itemend
?
?内部迭代器(使用proc):
?
class ArrayIteratorProc attr_accessor :array def initialize array @array = array end def each &block @array.each do |element| yield(element) end endendarray = %w{"tom" "machel"}it = ArrayIteratorProc.new(array)it.each do |e| p eend
?
外部迭代器可控性强,可以依据客户端的情况进行子集迭代或者访问,而内部迭代器则在迭代过程中会一口气往下执行到底。