Java-Memento模式和撤消

Java-Memento模式和撤消,第1张

Java-Memento模式和撤消

记忆模式用于保存对象的状态,而无需了解其内部数据结构。

我尝试用一​​个

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);        }    }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5439620.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存