小A:“迭代器模式有哪些角色?”
大B:“1、迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口。2、具体迭代器角色(ConcreteIterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置。3、容器角色(Container):容器角色负责提供创建具体迭代器角色的接口。4、具体容器角色(ConcreteContainer):具体容器角色实现创建具体迭代器角色的接口——这个具体迭代器角色于该容器的结构相关。”
大B:“从结构上,迭代器模式在客户与容器之间加入了迭代器角色。迭代器角色的加入,就可以很好的避免容器内部细节的暴露,而且也使得设计符号‘单一职责原则’。”
大B:“注意,在迭代器模式中,具体迭代器角色和具体容器角色是耦合在一起的——遍历算法是与容器的内部细节紧密相关的。为了使客户程序从与具体迭代器角色耦合的困境中脱离出来,避免具体迭代器角色的更换给客户程序带来的修改,迭代器模式抽象了具体迭代器角色,使得客户程序更具一般性和重用性。这被称为多态迭代。”