最少知识原则(LKP)说的是一个软件实体应当尽可能少地与其他实体发生相互作用。这 里的软件实体是一个广义的概念,不仅包括对象,还包括系统、类、模块、函数、变量等。 单一职责原则指导我们把对象划分成较小的粒度,这可以提高对象的可复用性。但越来越 多的对象之间可能会产生错综复杂的联系,如果修改了其中一个对象,很可能会影响到跟它相 互引用的其他对象。对象和对象耦合在一起,有可能会降低它们的可复用性。
使用LKP的设计模式
- 中介者模式 中介者模式很好地体现了最少知识原则。通过增加一个中介者对象,让所有的相关对象都通 过中介者对象来通信,而不是互相引用。所以,当一个对象发生改变时,只需要通知中介者对象 即可。
封装在最少知识原则中的体现
封装在很大程度上表达的是数据的隐藏。一个模块或者对象可以将内部的数据或者实现细 节隐藏起来,只暴露必要的接口 API 供外界访问。对象之间难免产生联系,当一个对象必须引 用另外一个对象的时候,我们可以让对象只暴露必要的接口,让对象之间的联系限制在最小的范围之内。 把变量的可见性限制在一个尽可能小的范围内,这个变量对其他不相关模块的影响就越小, 变量被改写和发生冲突的机会也越小。这也是广义的LKP的一种体现
总结
虽然遵守最小知识原则减少了对象之间的依赖,但也有可能增加一些庞大到难 以维护的第三者对象。在实际开发中,是否选择让代码符合最少知识原则, 要根据具体的环境来定。