本文首发于 http://www.YoungZY.com/
意图
- 控制类属性的写访问
- 将数据和使用它的方法分开
- 封装类对象的初始化过程
- 提供新型的
final
—— 在构造之后不可变
问题
一个类可能将它的属性(实例变量)暴露给它的方法,即使是这个方法不再需要,例如构造函数。使用私有数据对象模式可以避免这种不良操作。
一个类可能有一次性的不可变的属性,但它又不能定义为 final
类型。这种情况可以使用该设计模式完成一次性设定。
该模式的设计灵感来自于通过缩小属性(数据)的可见性来保护类状态的设计目标。
讨论
私有数据对象模式旨在通过限制属性的可见性来减少其暴露。
它将属性封装进单独的数据对象从而减少了类属性的数量。它允许类的设计者移除那些只允许在构造器中设置的属性的特殊的写操作,甚至是在类的内部也不可更改(final)。
结构
私有数据对象模式通过在目标类中提取一个数据类解决了上述问题,并且在目标类的实例中包含了一个数据类的引用。
核查清单(也可以理解为应用步骤)
- 创建数据类。将所有需要隐藏的属性都移入数据类中
- 在主类中创建一个数据类的引用
- 主类必须通过数据类的构造函数来初始化数据类
- 通过
getter
方法将数据类中的属性对外暴露 - 通过
setter
方法暴露以后可能需要修改的属性
加入讨论