维基百科对Memento 模式的描述指出:
对象的内部状态应该保存在外部,以便以后可以将对象恢复到该状态。
不得违反对象的封装。
我对如何违反封装感到困惑?它是指存储在 memento 中的字段的 getter 方法吗?
维基百科对Memento 模式的描述指出:
对象的内部状态应该保存在外部,以便以后可以将对象恢复到该状态。
不得违反对象的封装。
我对如何违反封装感到困惑?它是指存储在 memento 中的字段的 getter 方法吗?
我认为它指的是Memento
对象封装,它用于恢复状态并且只能从 Originator 访问
如果您在实现Memento
对象中注意到没有设置器,则其内部状态仅在构造函数/创建时更新
public static class Memento { private final String state; public Memento(String stateToSave) { state = stateToSave; } // accessible by outer class only private String getSavedState() { return state; } }
我对如何违反封装感到困惑?它是指存储在 memento 中的字段的 getter 方法吗?
是的,它指的是要存储在 Memento 中的字段的 getter 方法。具有这些字段的对象(又名 Originator)不想通过公开暴露其字段来违反其自身的封装。那么问题是如何在不公开的情况下保存字段(到备忘录中)。
换句话说,我们如何在不添加 getter 方法的情况下保存私有字段?我们不想通过以任何方式暴露我们(Originator)对象中的数据来违反封装。
Refactoring Guru有一篇很好的文章解释了这一点。