组合模式

组合模式,别名合成模式。

当对象或系统出现部分与整体的层次结构,类似于树状关系时,可以考虑用组合模式。

举个栗子:

<?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();

声明一点,这个组合和大家常说的“组合优于继承”的组合可不是一码事。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值