我正在对备忘录模式进行一些研究,似乎我遇到的大多数示例似乎都相对相似(将字符串保存到数组中并在需要时恢复它)现在如果我错了请纠正我,但我相信我刚刚描述的方法是“对象克隆”,但是实现备忘录模式的其他方法是什么?
从我还了解到可以使用序列化,但似乎存在一个灰色区域,人们说它违反了对象的封装,并且因此不是实现 Memento 模式的方法。
那么有人能够阐明实现该模式的方法吗?我的研究提出了一种所有不同事物的混合体,这让一切变得混乱。
Thanks
Java 集合框架定义Queue
,这可以提供帮助。
候选人代码:
public final class Memento<T>
{
// List of saved values
private final Queue<T> queue = new ArrayDeque<T>();
// Last entered value, whether it has been saved or not
private T currentValue;
// No initial state, ie currentValue will be null on construction, hence
// no constructor
// Set a value, don't save it
public void set(final T value)
{
currentValue = value;
}
// Persist the currently saved value
public void persist()
{
queue.add(currentValue);
}
// Return the last saved value
public T lastSaved()
{
return queue.element();
}
// Return the last entered value
public T lastEntered()
{
return currentValue;
}
}
值得注意的是,这段代码缺少了很多东西,但很容易实现:
- 恢复到最后保存的值;
- 不检查空值;
-
T
不执行Serializable
;
- 便捷方法(例如,添加一个值并将其设为最后保存的状态);
-
代码不是线程安全的!
Etc.
示例代码:
public static void main(final String... args)
{
final Memento<String> memento = new Memento<String>();
memento.set("state1");
System.out.println(memento.lastEntered()); // "state1"
memento.persist();
memento.set("state2");
System.out.println(memento.lastEntered()); // "state2"
System.out.println(memento.lastSaved()); // "state1"
}
实际上:这是一个脑死亡的实现,可以改进,但可以用作基础——扩展它取决于您的需求;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)