參考:
當我們的乙個物件可能代表乙個單一的實體,或者乙個組合的實體,但是仍然需要通過同樣的方式被使用時,這種情形則適合使用組合模式的設計。
乙個表單類例項在處理其表單所有元素的方法與處理該表單自身例項方法相同,在呼叫方法 render() 時,會隨之遍歷它的所有子元素並對他們呼叫 render() 方法
<?phpinte***ce renderableinte***ce
/** * 該組合內的節點必須派生於該元件契約。為了構建成乙個元件樹,
* 此為強制性操作。
*/class form implements renderableinte***ce
/*** @param renderableinte***ce $element
*/public function addelement(renderableinte***ce $element)
}class inputelement implements renderableinte***ce
}class textelement implements renderableinte***ce
public function render(): string
}$form = new form();
$form->addelement(new textelement('email:'));
$form->addelement(new inputelement());
$embed = new form();
$embed->addelement(new textelement('password:'));
$embed->addelement(new inputelement());
$form->addelement($embed);
<?php必須存在不可分割基本元素;/** * 組合模式抽象基類
*/abstract class companybase
public function getname()
//增加節點
abstract function add(companybase $c);
//刪除節點
abstract function remove(companybase $c);
//輸出節點資訊
abstract function show($deep);
//節點職責
abstract function work($deep);
}/**
* 公司類
*/class company extends companybaseelse
}public function remove(companybase $c)else
}public function show($deep = 0)
}public function work($deep = 0)]
"; $value->work($deep+2);}}
}/**
* 人力資源部門
*/class humanresources extends companybase
public function remove(companybase $c)
public function show($deep = 0)
public function work($deep = 0)
}/**
* 商務部門
*/class commerce extends companybase
public function remove(companybase $c)
public function show($deep = 0)
public function work($deep = 0)
}$c = new company("北京某科技公司");
$h = new humanresources("人力資源部門");
$com = new commerce("商務部門");
$c->add($h);
$c->add($com);
//天津分公司
//為了偷懶,分公司的部門直接copy母公司的
$c1 = new company("天津分公司");
$c1->add($h);
$c1->add($com);
$c->add($c1);
//武漢分公司
$c2 = new company("武漢分公司");
$c2->add($h);
$c2->add($com);
$c->add($c2);
//使用公司功能
$c->show();
$c->work();
組合後的物體仍然可以被組合。
PHP 設計模式 組合模式
組合模式 將物件組合成樹形結構來表現 部分 整體 的層次結構。目的 重點 使得客戶以一致的方式處理單個物件以及物件的組合。header content type text html charset utf 8 定義抽象類,抽象方法,方法引數根據 黎克特制替換原則 傳遞父類。abstract clas...
PHP設計模式之組合模式
當我們的乙個物件可能代表乙個單一的實體,或者乙個組合的實體,但是仍然需要通過同樣的方式被使用時,這種情形則適合使用組合模式的設計。組合模式是一種結構型模式。當看了書上的解釋之後,並不是很理解,遂去翻了翻 大化設計模式 以下為原文截圖 看完這本書上的解釋之後也不是很理解,但是能夠進行編碼了,以下為組合...
PHP設計模式之組合模式
網際網路公司流行扁平化管理,也就是管理層級盡量少於或者不超過三層,作為乙個底層的碼農,你的ceo和你的職級也就相差3層以內。但是很多傳統企業,則會有非常深的層級關係,從資料結構看,這種按職能進行分組的組織架構非常像一顆樹。而我們今天介紹的組合模式的作用就和這個企業組織架構層級的模式非常類似。gof定...