05 迪公尺特原則 LOD

2022-09-18 22:00:20 字數 1741 閱讀 4338

lod, law of demeter, 迪公尺特原則 or lkp, least knowledge principle, 最少知識原則

乙個物件應該對其他物件有最少的了解。乙個類應該對自己需要耦合或呼叫的類知道的最少,類的內部如何實現與呼叫者或者依賴者沒有關係,呼叫者或者依賴者只需知道它需要的方法即可。

只與直接的朋友發生通訊。

降低類之間的耦合度,提高了模組的相對獨立性

耦合度降低,從而提高了類的可重用率和系統的擴充套件性

需強調需注意

例子:有乙個集團公司,下屬單位有分公司和直屬部門,現在要求列印出所有下屬單位的員工id。先來看一下違反迪公尺特法則的設計。

// 總公司員工

class employee

public void setid(string id)

}// 分公司員工

class subemployee

public void setid(string id)

}// 子公司管理

class subcompanymanager

return list;

}}// 總公司管理

class companymanager

return list;

}public void printallemployee(subcompanymanager subcompanymanager)

// 總公司員工

listemployeelist = getallemployee();

for (employee employee : employeelist)

}}public class lodclient

}

問題出現在companymanager類,根據迪公尺特法則,只與直接的朋友發生通訊。而subemployee類並不是companymanager類的直接朋友(以區域性變數出現的耦合不屬於直接朋友),從邏輯上講總公司只與他的分公司耦合就行了,與分公司的員工並沒有任何聯絡,這樣設計顯然是增加了不必要的耦合。按照迪公尺特法則,應該避免類**現這樣非直接朋友關係的耦合。修改後的**如下

// 總公司員工

class employee

public void setid(string id)

}// 分公司員工

class subemployee

public void setid(string id)

}// 子公司管理

class subcompanymanager

return list;

}public void printsubcompany()

}}// 總公司管理

class companymanager

return list;

}public void printallemployee(subcompanymanager subcompanymanager)

}}public class lodclient

}

修改後,為分公司增加了列印人員id的方法,總公司直接呼叫來列印,從而避免了與分公司的員工發生耦合。

迪公尺特法則的初衷是降低類之間的耦合,由於每個類都減少了不必要的依賴,因此的確可以降低耦合關係。

過分的使用迪公尺特原則,會產生大量這樣的中介和傳遞類,導致系統複雜度變大。所以在採用迪公尺特法則時要反覆權衡,既做到結構清晰,又要高內聚低耦合。

迪公尺特法則 LoD

乙個物件應當對其他物件有盡可能少的了解。如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果其中的乙個類需要呼叫另外乙個類的某乙個方法的話,可以通過第三者 這個呼叫。以下的條件成為朋友條件 1.當前物件本身 this 2.以參量形式傳入到當前物件方法中的物件 3.當前物件的例項變...

LoD 迪公尺特法則

迪公尺特法則 lod 又稱最少知識原則 lkp 就是說乙個物件應當對其他物件盡可能少的了解。狹義的迪公尺特法則 如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用.如果其中乙個類需要呼叫另乙個類的方法的話,可以通過第三者 這個呼叫.缺點 會在系統內造出大量的小方法,散落在系統的各個角...

迪公尺特法則(LoD)最少知識原則

1.拉公尺特法則,如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用 盡可能的封閉私有 如果其中乙個類需要呼叫另乙個類的某乙個方法的話,可以通過第三者 這個呼叫 如通過呼叫介面定義 2.在類的介面設計上,每乙個類都應當盡量降低成員的訪問許可權,封裝好私有成員,不需要被其他類知道的屬性...