栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java-Memento模式和撤消

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/464124.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号