【发布时间】:2020-03-06 08:36:34
【问题描述】:
维基百科对Memento pattern 的描述指出:
对象的内部状态应该保存在外部,以便以后可以将对象恢复到这个状态。
不得违反对象的封装性。
我对如何违反封装感到困惑?是指memento中存储的字段的getter方法吗?
【问题讨论】:
标签: java design-patterns encapsulation memento
维基百科对Memento pattern 的描述指出:
对象的内部状态应该保存在外部,以便以后可以将对象恢复到这个状态。
不得违反对象的封装性。
我对如何违反封装感到困惑?是指memento中存储的字段的getter方法吗?
【问题讨论】:
标签: java design-patterns encapsulation memento
我认为是指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 有一篇很好的文章解释了这一点。
【讨论】: