2022年1月13日 星期四

[Geroge]面向對象設計-迪米特法則LKP

 --影片內容--

迪米特法則(Law Of Demeter Principle)

又稱作最少知識原則LKP(Least Knowledge Principle)

定義: 物件與物件之間應該使用盡可能少的方式關聯, 避免千絲萬縷的關係

低耦合

類知道的其他類應盡量少

類可以訪問其他類的方法或屬性也應盡量少

---------------------

例子:

我們現在有食材類別: Beef, Bread , Vegetable

他們能做成食物類別: Hamburger

而人物類別都能做食用: Lily, Lucy

他們的類別會如同下圖







最終, 他們的關係會像蜘蛛網一樣, 也會讓人很難一眼直觀的理解系統, 導致後面, 我們的維護成本會增加

這時我們可以思考, Lucy和Lily最終的目的是吃漢堡, 他們只需要知道漢堡, 並不需要知道其他食材的細節, 如同迪米特法則, 一個類他所需要知道的類越少越好, 這時, 其實只要生出KFC類別, 由他去生產漢堡





Lily和Lucy類別, 就只需要new 一個KFC就可以生出漢堡了









這樣我們系統的類別圖, 就會如下圖, Lily和Lucy只需要依賴KFC, 就能得到Hamburger, 而由KFC去買麵包Bread, 蔬菜Vegetable, 牛肉Beef, 最後生產出Hamburger, 這樣我們就看到剛剛的蜘蛛網結構明顯優化了, Lily和Lucy只知道KFC和Hamburger, 而KFC知道Bread, Vegetable, Beef , 這樣他們所知道的類就更少了, 他們所知道的方法更少了, 這樣就滿足我們最小知識原則 ,這樣我們系統就更簡明了









參考:

https://www.youtube.com/watch?v=w-BlQ5tsZfU&list=PLGmd9-PCMLhb16ZxeSy00qUsBazXgJyfM&index=9

https://github.com/iw5420/geroge-design-pattern

沒有留言:

張貼留言

[leetcode] [KMP] KMP

ABCDABD... ABCDABF... 簡單的說, 傳統解兩字串匹配部分 可能會來個雙迴圈, 哀個比對, 當不匹配的時候, 會將下方列再後移1位 然後不匹配再後移 然而 如果像上放已經有4個屬於匹配的字串, 她就應該直接往後移四位來匹配, 而不是只移動1位 隱藏的思維是, 當...