<?php class Teacher { //老師對學生髮布命令,清一下女生 public function commond(GroupLeader $groupLeader){ //初始化女生 for($i=0; $i<20; $i++){ $listGirls[] = new Girl(); } //告訴體育委員開始執行清查任務 $groupLeader -> countGirls($listGirls); } } class GroupLeader { //有清查女生的工做 public function countGirls($listGirls = array()){ echo '女生的數量是:' . sizeof($listGirls); } } class Girl { } class Client { public static function doing() { $teacher= new Teacher(); //老師發佈命令 $teacher -> commond(new GroupLeader()); } } Client :: doing(); class Teacher { public function commond(GroupLeader $groupLeader){ //告訴體育委員開始執行清查任務 $groupLeader -> countGirls(); } } class GroupLeader { private $_listGirls = array(); //傳遞全班的女生 public function __construct($listGirls){ $this -> _listGirls = $listGirls; } //有清查女生的工做 public function countGirls(){ echo "女生數量是:" . sizeof($this -> _listGirls); } } class Girl { } class Client { public static function doing() { //初始化女生 for($i=0; $i<20; $i++){ $listGirls[] = new Girl(); } $teacher= new Teacher(); //老師發佈命令 $teacher -> commond(new GroupLeader($listGirls)); } } Client :: doing();
一個對象應該對其餘對象瞭解最少。php
迪米特法則的核心就是下降類鍵的耦合,從而提升類的複用性。this
具體體現:spa
① 在類的劃分上,應該建立有弱耦合的類;
② 在類的結構設計上,每個類都應當儘可能下降成員的訪問權限;
③ 在類的設計上,只要有可能,一個類應當設計成不變類;
④ 在對其餘類的引用上,一個對象對其它對象的引用應當降到最低;
⑤ 儘可能下降類的訪問權限;
⑥ 謹慎使用序列化功能(類或接口在客戶端變動,卻未在服務端同步更新,引起序列化失敗,,項目管理易疏忽);
⑦ 不要暴露類成員,而應該提供相應的訪問器(屬性)。設計
迪米特法則主要運用在觀察者模式和中介者模式中code
迪米特法則的缺點:orm
一、遵循類之間的迪米特法則會使一個系統的局部設計簡化,由於每一個局部都不會與遠距離的對象有直接的關聯;但也會形成不一樣模塊之間的通訊效率下降,會使系統的不一樣模塊之間不容易協調。對象
二、在系統中造出大量的小方法,散落在系統的各個角落。這些方法僅傳遞間接的調用,與系統的商務邏輯無關。接口