當我們的乙個物件可能代表乙個單一的實體,或者乙個組合的實體,但是仍然需要通過同樣的方式被使用時,這種情形則適合使用組合模式的設計。
組合模式是一種結構型模式。
當看了書上的解釋之後,並不是很理解,遂去翻了翻《大化設計模式》,以下為原文截圖:
看完這本書上的解釋之後也不是很理解,但是能夠進行編碼了,以下為組合模式的**:
<?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
companybase
else
}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設計模式之組合模式
網際網路公司流行扁平化管理,也就是管理層級盡量少於或者不超過三層,作為乙個底層的碼農,你的ceo和你的職級也就相差3層以內。但是很多傳統企業,則會有非常深的層級關係,從資料結構看,這種按職能進行分組的組織架構非常像一顆樹。而我們今天介紹的組合模式的作用就和這個企業組織架構層級的模式非常類似。gof定...
php 論壇 PHP設計模式之組合模式
網際網路公司流行扁平化管理,也就是管理層級盡量少於或者不超過三層,作為乙個底層的碼農,你的ceo和你的職級也就相差3層以內。但是很多傳統企業,則會有非常深的層級關係,從資料結構看,這種按職能進行分組的組織架構非常像一顆樹。而我們今天介紹的組合模式的作用就和這個企業組織架構層級的模式非常類似。gof定...
PHP 設計模式 組合模式
組合模式 將物件組合成樹形結構來表現 部分 整體 的層次結構。目的 重點 使得客戶以一致的方式處理單個物件以及物件的組合。header content type text html charset utf 8 定義抽象類,抽象方法,方法引數根據 黎克特制替換原則 傳遞父類。abstract clas...