最少知識原則(LKP)說的是一個軟體實體應當儘可能少地與其他實體發生相互作用。這 裡的軟體實體是一個廣義的概念,不僅包括物件,還包括系統、類、模組、函式、變數等。單一職責原則指導我們把物件劃分成較小的粒度,這可以提高物件的可複用性。但越來越 多的物件之間可能會產生錯綜複雜的聯絡,如果修改了其中一個物件,很可能會影響到跟它相 互引用的其他物件。物件和物件耦合在一起,有可能會降低它們的可複用性。
使用LKP的設計模式
- 中介者模式中介者模式很好地體現了最少知識原則。通過增加一箇中介者物件,讓所有的相關物件都通 過中介者物件來通訊,而不是互相引用。所以,當一個物件發生改變時,只需要通知中介者物件 即可。
封裝在最少知識原則中的體現
封裝在很大程度上表達的是資料的隱藏。一個模組或者物件可以將內部的資料或者實現細 節隱藏起來,只暴露必要的介面 API 供外界訪問。物件之間難免產生聯絡,當一個物件必須引 用另外一個物件的時候,我們可以讓物件只暴露必要的介面,讓物件之間的聯絡限制在最小的範圍之內。把變數的可見性限制在一個儘可能小的範圍內,這個變數對其他不相關模組的影響就越小,變數被改寫和發生衝突的機會也越小。這也是廣義的LKP的一種體現
總結
雖然遵守最小知識原則減少了物件之間的依賴,但也有可能增加一些龐大到難 以維護的第三者物件。在實際開發中,是否選擇讓程式碼符合最少知識原則, 要根據具體的環境來定。