迪公尺特法則是設計模式所需要遵循的法則之一
所謂的迪公尺特法則:
定義如下:乙個物件應該對其他物件保持最少的了解,類與類之間的關係越密切,耦合度越大,當乙個類發生改變的時候。對另外乙個類的影響也越大。所以應該盡量降低類與類之間的耦合度
迪公尺特法則又叫做最少知道原則,指的是乙個類對自己依賴的類知道的越少越好,迪公尺特法則還有乙個更加簡單的定義:只和直接的朋友通訊,
直接的朋友:每個物件都會與其他物件有耦合關係,只要兩個物件之間有耦合關係,我們就說這兩個物件是朋友關係。耦合的方式很多,依賴,關聯,組合,聚合等等。其中,我麼稱出現成員變數,方法引數,方法返回值中的類為直接的朋友,而出現在區域性變數中的類則不是直接的朋友,也就是還說,陌生的類最好不要作為區域性變數的形式出現在類的內部
下面是違反迪公尺特法則的**例項:
class teacher
//告訴體育委員開始執行清查任務
$groupleader -> countgirls($listgirls);
}} class groupleader }
class girl
class client }
client :: doing();
**完美執行:下面是執行結果
但是這段**是違反迪公尺特法則的,為什麼這麼說呢,迪公尺特法則:只和直接的朋友類通訊。我們看teacher類,他的直接的朋友其實只有乙個groupleader類,這個類出現在teacher類的方法引數上(另外兩種方式是出現在成員變數或者返回值上)。所以按照迪公尺特法則的規定teacher類只能與groupleader類進行通訊,但是在commond方法中,居然使用了girl類。girl類不是teacher類的直接朋友。
我們來看優化後的**,作者把使用girl類的部分**挪移到了場景客戶端。
<?php
header("content-type:text/html;charset=utf8");
class teacher }
class groupleader
//有清查女生的工作
public function countgirls() }
class girl
class client
$teacher= new teacher();
//老師發布命令
$teacher -> commond(new groupleader($listgirls));
}} client :: doing();
?>
這樣就符合迪公尺特法則了。 迪公尺特法則筆記
public class course boss類 public class boss teamleader.checknumberofcourses courselist teamleader類 public class teamleader test測試類 public class test 這...
迪公尺特法則
定義 乙個物件應該對其他物件保持最少的了解。問題由來 類與類之間的關係越密切,耦合度越大,當乙個類發生改變時,對另乙個類的影響也越大。解決方案 盡量降低類與類之間的耦合。自從我們接觸程式設計開始,就知道了軟體程式設計的總的原則 低耦合,高內聚。無論是面向過程程式設計還是物件導向程式設計,只有使各個模...
迪公尺特法則
自從我們接觸程式設計開始,就知道了軟體程式設計的總的原則 低耦合,高內聚。無論是面向過程程式設計還是物件導向程式設計,只有使各個模組之間的耦合盡量的低,才能提高 的復用率。怎麼樣程式設計才能做到低耦合呢?那正是迪公尺特法則要去完成的。類與類之間的關係越密切,耦合度越大,當乙個類發生改變時,對另乙個類...