【问题标题】:What does "without violating encapsulation" mean in Memento patternMemento模式中的“不违反封装”是什么意思
【发布时间】:2020-03-06 08:36:34
【问题描述】:

维基百科对Memento pattern 的描述指出:

  • 对象的内部状态应该保存在外部,以便以后可以将对象恢复到这个状态。

  • 不得违反对象的封装性。

我对如何违反封装感到困惑?是指memento中存储的字段的getter方法吗?

【问题讨论】:

    标签: java design-patterns encapsulation memento


    【解决方案1】:

    我认为是指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;
        }
    }
    

    【讨论】:

      【解决方案2】:

      我对如何违反封装感到困惑?是指memento中存储的字段的getter方法吗?

      是的,它指的是要存储在 Memento 中的字段的 getter 方法。具有这些字段的对象(又名 Originator)不想通过公开暴露其字段来违反自己的封装。那么问题是如何在不公开的情况下保存字段(到备忘录中)。

      换句话说,我们如何在不添加 getter 方法的情况下保存私有字段?我们不希望以任何方式暴露我们(Originator)对象中的数据而违反封装。

      Refactoring Guru 有一篇很好的文章解释了这一点。

      【讨论】:

        猜你喜欢
        • 2020-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-29
        • 1970-01-01
        相关资源
        最近更新 更多