我尝试用一个
Iterator例子来解释
public class MementoListIterator<E> implements Iterator<E> { public static class Memento { private int savedIndex; private Memento(MementoListIterator<?> mementoListIterator) { this.savedIndex = mementoListIterator.index; } } private List<E> elements; private int index = 0; public MementoListIterator(List<E> elements) { this.elements = elements; } public Memento save() { return new Memento(this); } public void restore(Memento memento) { this.index = memento.savedIndex; } @Override public boolean hasNext() { return this.index < elements.size(); } @Override public E next() { return elements.get(index++); } @Override public void remove() { throw new UnsupportedOperationException("Not implemented yet"); }}
客户端现在可以保存迭代器的任何状态,而无需知道迭代器如何内部管理其状态。
public class Main { public static void main(String[] args) { List<String> list = Arrays.asList("A", "B", "C", "D", "E"); MementoListIterator<String> mementoListIterator = new MementoListIterator<String>( list); Memento initialState = mementoListIterator.save(); while (mementoListIterator.hasNext()) { String string = mementoListIterator.next(); System.out.println(string); } // Normally we can not re-use the iterator, but // fortuanatly we saved the initial state. // restore the initial state and we can use the Iterator again mementoListIterator.restore(initialState); while (mementoListIterator.hasNext()) { String string = mementoListIterator.next(); System.out.println(string); } }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)