组合模式,别名合成模式。
当对象或系统出现部分与整体的层次结构,类似于树状关系时,可以考虑用组合模式。
举个栗子:
<?php
abstract class Organization {
protected $name;
protected $child;
public function __construct($name) {
$this->name = $name;
}
abstract public function add(Organization $organ);
abstract public function display();
}
class Company extends Organization{
public function add(Organization $organ) {
$this->child[] = $organ;
}
public function display() {
if(!$this->child) {
print_r( $this->name . '末端机构.' );
return FALSE;
}
print_r( $this->name . '组织管辖以下机构:' );
foreach ($this->child as $child) {
print_r( $child->name );
}
}
}
class Department extends Organization{
public function add(Organization $organ) {
$this->child = NULL;
}
public function display() {
echo $this->name . '末端机构';
}
}
//client
$bjCompany = new Company(' 北京总部 ');
$hrDept = new Department(' HR部门 ');
$financeDept = new Department(' 财务部 ');
$shCompany = new Company(' 上海分部 ');
$bjCompany->add($hrDept);
$bjCompany->add($financeDept);
$bjCompany->add($shCompany);
$bjCompany->display();
声明一点,这个组合和大家常说的“组合优于继承”的组合可不是一码事。