php設計模式的六大原則(六):迪米特法則

<?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

一、遵循類之間的迪米特法則會使一個系統的局部設計簡化,由於每一個局部都不會與遠距離的對象有直接的關聯;但也會形成不一樣模塊之間的通訊效率下降,會使系統的不一樣模塊之間不容易協調。對象

二、在系統中造出大量的小方法,散落在系統的各個角落。這些方法僅傳遞間接的調用,與系統的商務邏輯無關。接口

相關文章
相關標籤/搜索