2015-05-27
组合模式(有时候又叫做部分-整体模式),将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
实现类图:

三大角色:
抽象结构(Company)角色:此角色实现所有类共有接口的默认行为,声明一个接口管理子部件。
叶子节点(Technology)角色:表示叶子对象,没有子节点。
枝节点(SubCompany)角色:用来存储子部件,实现与子部件有关的操作,如Add()等。
实现代码:
name=$name; } /**增加 * @param Company $company 子公司,部门 * @return mixed */ abstract function Add(Company $company); /**移除 * @param Company $company 子公司,部门 * @return mixed */ abstract function Remove(Company $company); /**显示公司及部门结构 * @param $depth * @return mixed */ abstract function Display($depth);}/**枝节点 子公司 * Class Beijing */class SubCompany extends Company{ private $sub_companys=array(); function __construct($name) { parent::__construct($name); } function Add(Company $company) { $this->sub_companys[]=$company; } function Remove(Company $company) { $key=array_search($company,$this->sub_companys); if($key!==false) { unset($this->sub_companys[$key]); } } function Display($depth) { $pre=; for($i=0;$i<$depth;$i++) { $pre.=-; } $pre.=$this->name.; echo $pre; foreach($this->sub_companys as $v) { $v->Display($depth+2); } }}/**叶子节点 财务部 * Class DeptCompany */class MoneyDept extends Company{ function __construct($name) { parent::__construct($name); } /**增加 * @param Company $company 子公司,部门 * @return mixed */ function Add(Company $company) { echo 叶子节点,不能继续添加节点。。。。。。。。。。; } /**移除 * @param Company $company 子公司,部门 * @return mixed */ function Remove(Company $company) { echo 叶子节点,不能删除节点。。。。。。。。。。; } /**显示公司及部门结构 * @param $depth * @return mixed */ function Display($depth) { $pre=; for($i=0;$i<$depth;$i++) { $pre.=-; } $pre.=$this->name.; echo $pre; }}/**叶子节点 技术部门 * Class DeptCompany */class TechnologyDept extends Company{ function __construct($name) { parent::__construct($name); } /**增加 * @param Company $company 子公司,部门 * @return mixed */ function Add(Company $company) { echo 叶子节点,不能继续添加节点。。。。。。。。。。; } /**移除 * @param Company $company 子公司,部门 * @return mixed */ function Remove(Company $company) { echo 叶子节点,不能删除节点。。。。。。。。。。; } /**显示公司及部门结构 * @param $depth * @return mixed */ function Display($depth) { $pre=; for($i=0;$i<$depth;$i++) { $pre.=-; } $pre.=$this->name.; echo $pre; }}
header(Content-Type:text/html;charset=utf-8);//------------------------组合器模式测试代码------------------require_once ./Composer/Composer.php;$root=new SubCompany(北京总公司);$root->Add(new MoneyDept(总公司财务部));$root->Add(new TechnologyDept(总公司技术部));$shanghai=new SubCompany(上海分公司);$shanghai->Add(new TechnologyDept(上海分公司技术部));$shanghai->Add(new MoneyDept(上海分公司财务部));$root->Add($shanghai);$root->Display(1);echo
组合模式让你可以优化处理递归或分级数据结构。有许多关于分级数据结构的例子,使得组合模式非常有用武之地。关于分级数据结构的一个普遍性的例子是你每次使用电脑时所遇到的:文件系统。文件系统由目录和文件组成。每个目录都可以装内容。目录的内容可以是文件,也可以是目录。按照这种方式,计算机的文件系统就是以递归结构来组织的。如果你想要描述这样的数据结构,那么你可以使用组合模式Composite。
1
CI框架连接数据库配置操作以及多数据库操作
09-05
2
asp 简单读取数据表并列出来 ASP如何快速从数据库读取大量数据
05-17
3
C语言关键字及其解释介绍 C语言32个关键字详解
04-05
4
C语言中sizeof是什么意思 c语言里sizeof怎样用法详解
04-26
5
PHP中的魔术方法 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep,
09-05
6
将视频设置为Android手机开机动画的教程
12-11
7
PHP中的(++i)前缀自增 和 (i++)后缀自增
09-05
8
常用dos命令及语法
09-27
最简单的asp登陆界面代码 asp登陆界面源代码详细介绍
2017-04-12
PHP中include和require区别之我见
2014-09-05
php递归返回值的问题
2014-09-05
如何安装PHPstorm并配置方法教程 phpstorm安装后要进行哪些配置
2017-05-03
单片机编程好学吗?单片机初学者怎样看懂代码
2022-03-21
PHP 教程之如何使用BLOB存取图片信息实例
2014-09-05
学ug编程如何快速入门?
2022-03-17
学习使用C语言/C++编程的7个步骤!超赞~
2022-03-20
PHP数组函数array
2014-09-05
零基础的初学者怎样学习java,或者应该先学什么?
2022-03-21
像素拼图最新版下载v5.01 安卓版
其它手游 23.76MB
下载
机器人战斗竞技场手机版下载v3.71 安卓版
其它手游 77.19MB
下载
果冻人大乱斗最新版下载v1.1.0 安卓版
其它手游 113.98MB
下载
王者100刀最新版下载v1.2 安卓版
其它手游 72.21MB
下载
trueskate真实滑板正版下载v1.5.102 安卓版
其它手游 83.48MB
下载
矢量跑酷2最新版下载v1.2.1 安卓版
其它手游 119.39MB
下载
休闲解压合集下载v1.0.0 安卓版
其它手游 33.41MB
下载
指尖游戏大师最新版下载v4.0.0 安卓版
其它手游 74.77MB
下载飞天萌猫下载v3.0.3 安卓版
下载
火柴人越狱大逃脱下载v1.1 安卓版
下载
末日战场生死局下载v1.0 安卓版
下载
安静书女孩世界下载v1.0 安卓版
下载
消个寿司下载v1.00 免费版
下载
趣味找猫猫下载v1.1.2 安卓版
下载
方块男孩大战恶霸最新版下载v1.0.18 安卓版
下载
根本难不倒我下载v1.0.1 最新版
下载