知识卡片
朋友之间也要收敛public方法保持距离
内容
[[迪米特法则的定义]]同样约束朋友类之间——即使是朋友也不能无所不知。安装向导类Wizard把 三个步骤方法都设为public,调用方据返回值决定是否继续,耦合过紧:改一个返回类型就得连带 修改调用方。重构方案是把三个方法收敛为private,新增installWizard()作为唯一public入口。 发散:这是把”内部多步骤协作”包装成”单一入口”,收窄public面最常见的手法。
参考来源
- 位置:《设计模式之禅(第2版)》第5章《迪米特法则》(源文件:_epub-src/text/part0020.html)
- 结论依据:原文分析Wizard把first/second/third设为public导致InstallSoftware过度依赖内部步骤细节,指出"如果要将Wizard类中的first方法返回值的类型由int改为boolean,就需要修改InstallSoftware类",随后给出把三个方法改为private、新增installWizard统一入口的重构方案。
- 原始内容:Wizard类把太多的方法暴露给InstallSoftware类,两者的朋友关系太亲密了,耦合关系变得异常牢固……通过这样的重构后,Wizard类就只对外公布了一个public方法,即使要修改first方法的返回值,影响的也仅仅只是Wizard本身。