最少知識原則的終極目標的是實現徹底傻瓜式的程序。 舉個例子吧, 就好比 美圖神器, 你上傳一張鳳姐的照片後,你能夠選擇 天然磨皮,高度磨皮 -> 瘦臉,瘦腿模式 -> 美瞳-> 手動豐胸等等。 固然, 你也能夠直接使用一鍵美化,瞬間angelababy. 你徹底不用關心,這些軟件是怎樣實現這些功能的,讓你變美變美變的更美就夠了。 並且,更人性化的是,他提供了一鍵美化的功能,更讓你瞬間美美噠。
好吧,回到現實。
咱們在程序中,把這個行爲就叫作最少知識原則。他的要求就和上面同樣,你的程序暴露的接口要是最傻瓜式的,不然你就是反人性!!!
咱們來具體說一下實現吧。閉包
說幾個應用場景吧
看個圖
這是咱們如今對象間的關係,若是你的leader要你去實現這個業務,我以爲,我寧願辭!職!
因此,這種反人性的事情,咱們是不會作的。 咱們通常會,本身動手改一下。
哈哈哈!!! 要知道 一維的難度 << 二維的難度.
看見這樣的實現,內心也放心多了。 這個其實就是中介者模式,裏面使用了最少知識原則, 原本對象間的聯繫可謂是 超!級!復!雜!。 但通過重構和優化以後,瞬間下降了一個量級。
關於一些具體實例,你們能夠參考一下 前面的 中介者模式 裏面所介紹的。
咱們如何作到解除對象間的耦合性主要手段仍是不少的。 好比學習中介者模式,在對象間建立一箇中介者來管理一切。 而其中使用的手段就是封裝和隱藏。
封裝在程序中起到的做用就是,封裝內部數據,封裝操做,而後暴露一個最直接的接口。
一樣,再拿單例模式來講一說。函數
var single = (function(){ var result; return function(obj){ return result||(result=obj); } })();
將保存結果的變量放到閉包裏面,完美的包裝了數據,既不會污染全局,並且也十分方便調用。學習
其實,最少知識原則和單一原則所達到目的是類似的,一個是,讓你的程序對外儘可能簡單,一個是讓你的程序裏的對象,相互聯繫儘可能簡單。 關於若是實現的話,其實,就是封裝參數,封裝函數等這一類的手段,而這些在模式介紹中已經闡述的很清楚了,這裏就不作過多的講解。 若是有興趣能夠看看前面 的 中介者模式,代理模式,策略模式等。優化