组合模式(Composite Pattern)--部分-整体模式

百度词条的解释

http://baike.baidu.com/view/3591789.htm

<?php
//组合模式
abstract class AbstractClass {

	private $name;

	private $list;

	public function add(AbstractClass $item) {
	}

	public function remove(AbstractClass $item) {
	}

}

//枝节点
class Limb extends AbstractClass {

	public function __set($key, $value) {
		$this->$key = $value;
	}

	public function __get($key) {
		if(isset($this->$key)) {
			return $this->$key;
		} else {
			return NULL;
		}
	}


	public function __construct() {
		$this->list = array();
	}

	public function add(AbstractClass $item) {
		array_push($this->list, $item);
	}

	public function remove(AbstractClass $item) {
		if($key = array_search($item, $this->list)) {
			unset($this->list[$key]);
		}
	}

	public function show() {
		echo $this->name.'<br/>';
		if(!empty($this->list)) {
			foreach($this->list AS $val) {
				echo '(Parent is'.$this->name.')';
				$val->show();
			}
		}
		return $this->name;
	}
}

//叶子节点
class Leaf extends AbstractClass {

	public function __construct() {
		$this->list = null;
	}

	public function __set($key, $value) {
		$this->$key = $value;
	}

	public function __get($key) {
		if(isset($this->$key)) {
			return $this->$key;
		} else {
			return NULL;
		}
	}

	public function show() {
		echo $this->name.',';
		return $this->name;
	}

}

class Tree {

	private $tree;

	public function __set($key, $value) {
		$this->$key = $value;
	}

	public function __get($key) {
		if(isset($this->$key)) {
			return $this->$key;
		} else {
			return NULL;
		}
	}

	public function getTree(AbstractClass $tree) {
		$tree->name = '1';
		$leaf2 = new Leaf();
		$leaf2->name = '2';
		$tree->add($leaf2);
		$limb3 = new Limb();
		$limb3->name = '3';
		$tree->add($limb3);
		$leaf4 = new Leaf();
		$leaf4->name = '4';
		$limb3->add($leaf4);
		$leaf5 = new Leaf();
		$leaf5->name = '5';
		$limb3->add($leaf5);
		$this->tree = $tree;
	}

}

$tree = new Tree();
$limb = new Limb();
$tree->getTree($limb);
echo $tree->tree->show();

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值