GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。从定义可见,迭代器模式是为容器而生。再看STL:其中的容器提供迭代器,算法使用迭代器。模式UML图:
对容器对象的各个元素的访问必然涉及到遍历算法,如果单单是为了不暴露该对象的内部细节,可以在容器对象中实现遍历算法,提供遍历自身的接口,但是为什么不这么做呢? 在这种情况下,容器承受了过多的功能,它不仅要负责自己“容器”内的元素维护(添加、删除等等),而且还要提供遍历自身的接口,这就违反了“单一职责原则”;
而且由于遍历状态保存的问题,不能对同一个容器对象同时进行多个遍历。