> For the complete documentation index, see [llms.txt](https://haoqinn.gitbook.io/handbook-of-design-pattern/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://haoqinn.gitbook.io/handbook-of-design-pattern/she-ji-mo-shi-yuan-ze/zui-shao-zhi-shi-yuan-ze.md).

# 最少知识原则

最少知识原则 LKP「Least Knowledge Principle」说的是一个软件实体应当尽可能少地与其他实体发生相互作用。这里的软件实体是一个广义的概念，不仅包括对象，还包括系统、类、模块、函数、变量等。

## 减少对象之间的联系

单一职责原则指导我们把对象划分成较小的粒度，这可以提高对象的可复用性。但越来越多的对象之间可能会产生错综复杂的联系，如果修改了其中一个对象，很可能会影响到跟它相互引用的其他对象。**对象和对象耦合在一起，有可能会降低它们的可复用性**。

最少知识原则要求我们在设计程序时，应当尽量减少对象之间**不必彼此直接通信**，那么这两个对象就**不要发生直接的相互联系**。 常见的做法是引入一个**第三者对象**，来承担这些对象之间的通信作用。如果一些对象需要向另一些对象发起请求，可以通过第三者来转发这些请求。例如引入「中介者」。

## 小结

现实生活中，全自动洗衣机的按键就属于最少知识原则的一种，加水、洗衣、漂洗、脱水全部是独立的系统，由第三者对象外部按键串联了起来。但是虽然遵守最小只是原则减少了对象之间的依赖，但也可能增加一些庞大到难以维护的第三者对象，就比如微波炉的无数个按键。因此在实际开发中，是否选择让代码符合最小知识原则，要根据具体的环境来定
