知识卡片

双接口设计用宽窄接口隔离备忘录的访问权限

普通读书笔记卡 · 1992.g

内容

合格备份不该被外部篡改,但[[备忘录模式的定义与三个角色]]基础实现里Memento的 getter/setter是公开的。解法是”双接口设计”:定义空接口IMemento供外部引用;Originator 内部私有类Memento实现IMemento,字段全部private。发散:宽窄接口是 [[接口隔离原则的定义与单一职责原则的区别]]的极端应用——窄接口把”能做什么”压缩到零, 只保留”可被引用”。

参考来源

- 位置:《设计模式之禅(第2版)》第24章《备忘录模式》(源文件:_epub-src/text/part0113.html) - 结论依据:原文给出空接口IMemento、Originator内置private类Memento实现IMemento、Caretaker只持有IMemento引用的完整实现,并总结"我们的一个类可以实现多个接口……一个是业务的正常接口……叫做宽接口;另外一个接口是一个空接口……这个叫做窄接口"。 - 原始内容:备份是不能被篡改的,也就是说需要缩小备份出的备忘录的阅读权限,保证只能是发起人可读就成了……在系统设计时,如果考虑对象的安全问题,则可以提供两个接口,一个是业务的正常接口……另外一个接口是一个空接口……由于窄接口中没有提供任何操纵数据的方法,因此相对来说比较安全。