組合模式(Composite Pattern)又叫做部分-整體模式,用于將對(duì)象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次關(guān)系。組合模式使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。
常見使用場(chǎng)景:如樹形菜單、文件夾菜單、部門組織架構(gòu)圖等。
關(guān)鍵代碼:部分-整體場(chǎng)景,樹枝內(nèi)部組合該接口,并且含有內(nèi)部屬性 List,里面放 Component。
示例代碼:
文件節(jié)點(diǎn):Filer
class Filer {
private $file_name;//文件名
public function __construct($file_name){
$this->file_name = $file_name;
}
//文件顯示方法
public function display(){
print_r($this->file_name);
}
}
目錄節(jié)點(diǎn):Noder
class Noder {
private $node_name;//目錄名
private $list = array(); //下級(jí)目錄、文件列表
public function __construct($node_name){
$this->node_name = $node_name;
}
//新增下級(jí)目錄
public function addNoder(Noder $noder){
array_push($this->list, $noder);
}
//新增文件
public function addFiler(Filer filer){
array_push($this->list, $filer);
}
//顯示下級(jí)目錄及文件
public function display(){
print_r($this->node_name);
foreach($this->list as $item){
$item.display();
}
}
}
測(cè)試類:Clienter
$noder = new Noder("home");
$noder->addFilter(new Filer("fileA"));
$noder->addFilter(new Filer("fileB"));
$usr = new Noder("usr");
$noder->addNoder($usr);
$usr->addFiler("fileC");
$noder->display();