首页/开发/代码质量与评审速查/封装与信息隐藏(Information Hiding)
设计原则与模式62 条

封装与信息隐藏(Information Hiding)

模块通过接口承诺能力,把实现选择藏起来(Parnas 1972):隐藏的是「可能变化的设计决策」,不是单纯的私有字段;封装让替换实现不惊动调用方。

经典文献Parnas《On the Criteria To Be Used in Decomposing Systems into Modules》
隐藏对象易变的实现决策(存储、算法、协议)
手段模块接口、私有可见性、不留后门访问器

隐藏点示例

隐藏点示例
// 暴露实现细节的反例
public List<Row> rows;               // 外部直接改

// 信息隐藏
private final List<Row> rows;
public Snapshot snapshot() { ... }   // 稳定视图

易错点

  • 只做字段私有化不改协作方式:结构暴露依旧
  • 为测试暴露内部状态的后门:封装被侵蚀,实现被绑定

数据来源与参考

  • David L. Parnas(1972)《On the Criteria To Be Used in Decomposing Systems into Modules》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌