因为大部分 class 实现的时候,关键的数据字段都会以 private 形式存储,不能设置为 public.如果我们创建一个 Snapshot class,它可以主动地访问 Object 来记录其字段,那么其面临的问题就是无法访问 Object 的 private 字段.
所以解决办法是,让 Object 来生成自己的 snapshot,这样就不会有外部 class 来访问自己的私有数据了.并且,除了 Object 自己,没有其他对象可以直接访问其 snapshots,而是必须通过给定的 interface,这样确保了不会暴露实现细节.在此基础之上,snapshots 可以被保存在 Caretakers 的对象中,由于限制策略,Caretakers 也无法直接访问 snapshots 的内部状态,但是可以通过 interface 与之互动.(例如,这里的 Caretakers 可以是负责 snapshot history 的类)
Overview
Conventionally,我们称原对象(上文里的 Object 对象)为 Originator.
