北風設計模式課程 35 迪公尺特法則

2022-03-24 04:50:50 字數 3515 閱讀 5799

乙個物件應當對其他物件盡可能少的了解依賴抽象,不依賴具體:比如和陌生人的抽象有依賴,但是沒和具體的陌生人有依賴。1、通過第三方:通過朋友類

2、依賴倒置原則:通過抽象:通過陌生人的抽象類乙個物件應當對其他物件盡可能少的了解

迪公尺特法則(law of demeter )又叫做最少知識

原則,也就是說,乙個物件應當對其他物件盡可

能少的了解。

迪公尺特法則最初是用來作為物件導向的系統設

計風格的一種法則,於2023年秋天由lan holland

在美國東北大學為乙個叫做迪公尺特的專案設計提

出的。如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用:如果其中乙個類需要呼叫另一類的某乙個方法的話,可以通過第三者**這個呼叫。1.外觀模式

2.中介者模式**或參考:物件導向五大原則-----迪公尺特法則

迪公尺特法則(law of demeter )又叫做最少知識原則,也就是說,乙個物件應當對其他物件盡可能少的了解。不和陌生人說話。英文簡寫為: lod。

迪公尺特法則最初是用來作為物件導向的系統設計風格的一種法則,於2023年秋天由lan holland在美國東北大學為乙個叫做迪公尺特的專案設計提出的。

迪公尺特法則可以簡單說成:talk only to your immediate friends。 對於ood來說,又被解釋為下面幾種方式:乙個軟體實體應當盡可能少的與其他實體發生相互作用。每乙個軟體單位對其他的單位都只有最少的知識,而且侷限於那些與本單位密切相關的軟體單位。

迪公尺特法則的初衷在於降低類之間的耦合。由於每個類儘量減少對其他類的依賴,因此,很容易使得系統的功能模組功能獨立,相互之間不存在(或很少有)依賴關係。

迪公尺特法則不希望類之間建立直接的聯絡。如果真的有需要建立聯絡,也希望能通過它的友元類來轉達。因此,應用迪公尺特法則有可能造成的乙個後果就是:系統中存在大量的中介類,這些類之所以存在完全是為了傳遞類之間的相互呼叫關係——這在一定程度上增

加了系統的複雜度。

如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果其中乙個類需要呼叫另一類的某乙個方法的話,可以通過第三者**這個呼叫。

這麼看不太形象,我們來舉個例子,和陌生人說話,甲和朋友認識,朋友和陌生人認識,而甲和陌生人不認識,這時甲可以直接和朋友說話,朋友可以直接和陌生人說話,而如果甲想和陌生人說話,就必須通過朋友

首先,第一種方式**實現:

1

public

class

jia5

6public

void

play(stranger stranger)

9 }

1

//朋友

2public

class

friend

6 }

1

//陌生人

2public

class

stranger

6 }

這種方式是肯定不對的,甲根本沒有通過朋友,直接引用了陌生人的方法,不符合迪公尺特法則

第二種方式

**實現

1//甲

2public

class

jia8 }

1

//朋友

2public

class

friend 67

public

stranger getstranger()

10 }

1

//陌生人

2public

class

stranger

6 }

這樣的方式呢,看上去陌生人的例項是通過朋友來建立了,但還是不行,因為甲中包含的陌生人的引用,甲還是和陌生人直接關聯上了,所以,不符合迪公尺特法則,我們要的是甲和陌生人沒有一丁點直接關係

第三種方式

1//甲

2public

class

jia8

9public

void

setfriend(friend friend)

1213

public

void

play(friend friend)

16 }

1

//朋友

2public

class

friend 67

public

void

playwithstranger()

11 }

1

public

class

stranger

5 }

這種方式,甲和陌生人之間就沒有了任何直接聯絡,這樣就避免了甲和陌生人的耦合度過高

當然還有一種更好的方式,與依賴倒轉原則結合,為陌生人建立乙個介面

1//甲

2public

class

jia9

10public

void

setstranger(stranger stranger)

1314

public

friend getfriend()

1718

public

void

setfriend(friend friend)

2122

public

void

play()

27 }

1

public

class

friend

5 }

1

//陌生人抽象類

2public

abstract

class

stranger

1

//具體陌生人

2public

class strangera extends

stranger

78 }

這樣的方式,和甲直接通訊的是陌生人的抽象父類,和具體陌生人沒有直接關係,所以符合迪公尺特法則

1、在系統裡造出大量的小方法,這些方法僅僅是傳遞間接的呼叫,與系統的商務邏輯無關。

2、遵循類之間的迪公尺特法則會是乙個系統的區域性設計簡化,因為每乙個區域性都不會和遠距離的物件有直接的關聯。但是,這也會造成系統的不同模組之間的通訊效率降低,也會使系統的不同模組之間不容易協調。

1.外觀模式

2.中介者模式

設計模式 迪公尺特法則

一,概述 迪公尺特法則 law of demeter 又叫作最少知識原則 least knowledge principle 簡寫lkp 就是說乙個物件應當對其他物件有盡可能少的了解,不和陌生人說話。英文簡寫為 lod 如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接相互作用。如果其中乙個類...

設計模式 迪公尺特法則

設計模式 迪公尺特法則 only talk to your immediate friends 只與直接的朋友通訊。即每個物件都有耦合關係,物件之間有耦合。定義老師類 public class teacher 然後進行查詢任務 groupleader.countgirls listgirls 然後定...

設計模式 迪公尺特法則 Lod LKP

迪公尺特法則 law of demeter,lod 也稱最少知識原則 least knowledge principle,lkp 理解 如果兩個類不必彼此直接通訊,那麼這兩個類就不應該發生直接的相互作用。如果其中乙個類需要呼叫另乙個類的某乙個放發的話,可以通過第三者 這個呼叫。每個物件都必然會與其他...