没有一个答案似乎解决了迭代器的原因。创建迭代器设计模式是因为对象应该控制自己的状态(除了可能只有公共属性的值对象)。
假设我们有一个包含数组的对象,并且您在该对象中有一个接口来向该数组添加项目。但是你已经做了这样的事情:
class MyClass
{
private ArrayList<Item> myList;
public MyClass()
{
myList = new ArrayList();
}
public addItem( Item item )
{
item.doSomething(); // Lets say that this is very important before adding the item to the array.
myList.add( item );
}
}
现在,如果我在上面的类中有这个方法:
public ArrayList getList()
{
return myList;
}
有人可以通过此方法获取对 myList 的引用并将项目添加到数组中,而无需调用 item.doSomething(); 这就是为什么你不应该返回对数组的引用,而是返回它的迭代器。可以从数组中获取任何项目,但不能操作原始数组。所以 MyClass 对象仍然控制着它自己的状态。
这就是发明迭代器的真正原因。