发布于2026-05-21 阅读(0)
扫一扫,手机访问
说到撤销功能,很多开发者第一反应可能是全局历史栈或者反射。但备忘录模式(Memento)提供了一种更优雅、更内聚的思路:它的核心,其实是“状态快照”加上“隔离恢复”。简单来说,就是让对象自己掌握状态的存档与读档,外部只负责保管存档文件,无权插手内容。

状态是对象的私有财产,如果允许外部直接读写,封装性就荡然无存了。因此,发起人对象需要对外提供两个清晰的方法:
copy.deepcopy、Ja va中构造一个全新的对象,还是Go里显式复制切片和map——生成一份只读的状态快照。备忘录不是一个简单的数据容器,它更像一个上了锁的保险箱,里面封存着某一时刻的状态:
private final;在Go里用小写字母开头的未导出字段;在Python中,虽然靠约定,但结合深拷贝能有效保障。getState()类方法,而且返回值最好是不可变类型(如String、ImmutableList)或其副本,防止外部拿到引用后意外篡改快照。管理者的角色极其纯粹,它就像一个带编号的仓库管理员:
push(memento)和pop()或get(index)这样的存取方法。但请注意,它绝不应该去调用备忘录的getState()方法。撤销操作最怕的就是状态不一致。一次完整的回滚,必须还原所有关联变量,不能只改一半:
EditorMemento(content, cursorPos, selection)。总而言之,备忘录模式通过清晰的职责划分——发起人负责生成和解析状态,备忘录负责封装不可变快照,管理者负责单纯存储——实现了既安全又灵活的状态回滚机制。它把变化的可能性留在了对象内部,对外则提供了简洁稳定的接口,这正是优秀封装设计的体现。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8