php组合模式主要用于上下级关系,可以新增叶子和树枝,分析如下代码即可明白组合模式的含义:

<?php
header('Content-Type:text/html;charset=utf-8');
/**
* 创建员工信息抽象类
*/
abstract class staff
{
abstract function create();//创建员工信息
}
/**
* 创建部门信息抽象类
*/
abstract class department extends staff
{
abstract function combine(staff $item);
abstract function chaifen(staff $item);
}
/**
* 创建员工信息实体类
*/
class createStaff extends staff
{
private $name;
private $age;
private $sex;
private $staff = array(); public function __construct($name,$age,$sex)
{
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
/**
* 创建员工信息
*/
public function create()
{
$this->staff[$this->name] = array(
'name'=>$this->name,
'age'=>$this->age,
'sex'=>$this->sex,
);
return $this->staff;
}
}
/**
* 创建部门关系
*/
class createDepartment extends department
{
private $departmentname;//部门名称
private $items = array();//用于存放人员信息
private $depart_arr = array();//用于存放部门信息
public function __construct($departmentname)
{
$this->departmentname = $departmentname;
} public function create()
{
foreach($this->items as $item){
$arr = $item->create();
$this->depart_arr[$this->departmentname][] = $arr;
}
if(empty($this->depart_arr)){
$this->depart_arr[$this->departmentname] = array();
}
return $this->depart_arr;
} /**
* 把传进来的信息放进items数组
*/
public function combine(staff $item)
{
$this->items[] = $item;
} /**
* 把传进来的信息删除
*/
public function chaifen(staff $item)
{
$key = array_search($item,$this->items);
if($key!==false){
unset($this->items[$key]);
}
}
}
$emploee1 = new createStaff('LHL','27','男');
$emploee2 = new createStaff('XNN','26','男');
$dep1 = new createDepartment('技术部');
$dep1->combine($emploee1);
$dep1->combine($emploee2); $emploee3 = new createStaff('MJ','22','男');
$emploee4 = new createStaff('FJJ','22','女');
$dep2 = new createDepartment('编辑部');
$dep2->combine($emploee3);
$dep2->combine($emploee4); $dep = new createDepartment('杏林誉苑');
$dep->combine($dep1);
$dep->combine($dep2); echo '<pre>';
print_r($dep->create());
echo '</pre>';

显示效果如下

php设计模式之--组合模式的更多相关文章

  1. C#设计模式(10)——组合模式(Composite Pattern)

    一.引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象 ...

  2. c++设计模式15 --组合模式

    今天研究了一下设计模式15 组合模式 本人是菜鸟一枚,所以一开始完全不懂组合究竟是什么意思.先上图一张,树形结构图: 文档说,如果想做出这样的结构,通常考虑组合模式.那是为什么呢?现在让我们看一下组合 ...

  3. 乐在其中设计模式(C#) - 组合模式(Composite Pattern)

    原文:乐在其中设计模式(C#) - 组合模式(Composite Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 组合模式(Composite Pattern) 作者:weba ...

  4. JavaScript设计模式之----组合模式

    javascript设计模式之组合模式 介绍 组合模式是一种专门为创建Web上的动态用户界面而量身制定的模式.使用这种模式可以用一条命令在多个对象上激发复杂的或递归的行为.这可以简化粘合性代码,使其更 ...

  5. C#设计模式(10)——组合模式(Composite Pattern)(转)

    一.引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象 ...

  6. C#设计模式:组合模式(Composite Pattern)

    一,C#设计模式:组合模式(Composite Pattern) using System; using System.Collections.Generic; using System.Linq; ...

  7. 【GOF23设计模式】组合模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_组合模式.树状结构.杀毒软件架构.JUnite底层架构.常见开发场景 package com.test.composite ...

  8. 设计模式:组合模式(Composite)

    定   义:将对象组合树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象使用具有一致性. 结构图: Component类: abstract class Component ...

  9. [设计模式] 8 组合模式 Composite

    DP书上给出的定义:将对象组合成树形结构以表示“部分-整体”的层次结构.组合使得用户对单个对象和组合对象的使用具有一致性.注意两个字“树形”.这种树形结构在现实生活中随处可见,比如一个集团公司,它有一 ...

  10. 再起航,我的学习笔记之JavaScript设计模式15(组合模式)

    组合模式 组合模式(Composite): 又称部分-整体模式,将对象组合成树形结构以表示"部分整体"的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 如果有一个 ...

随机推荐

  1. Tarjan缩点+DAG图dp

    题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只 ...

  2. bzoj 1552: [Cerc2007]robotic sort

    1552: [Cerc2007]robotic sort Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1198  Solved: 457[Submit] ...

  3. List遍历时删除遇到的问题

    这周在开发中遇到了一个以前没遇到的小Bug,在这里记录下来. List集合,我们平时都经常使用.但是,我在遍历List集合时,调用了List集合的remove方法来删除集合中的元素,简单的代码结构是这 ...

  4. systemtap学习笔记及疑问

    http://blog.csdn.net/sunnybeike/article/details/7769663

  5. Android开发者选项——Gpu呈现模式分析

    对于Android用户来说,无论你用的什么品牌的手机,在开发者选项中都能发现“玄学曲线”的开关,之所以称其为玄学曲线,还是因为它被很多网友用于测试一个说不清道不明的东西——流畅度.到底多流畅才叫流畅, ...

  6. 转:WebRTC技术及应用2 – NAT穿越技术的使用

    评:webrtc自带的打洞,穿透协议. 转: http://www.unclekevin.org/?p=924 959 views WebRTC技术及应用2 – NAT穿越技术的使用 发表回复 (题图 ...

  7. Android HandlerThread 消息循环机制之源代码解析

    关于 HandlerThread 这个类.可能有些人眼睛一瞟,手指放在键盘上,然后就是一阵狂敲.立即就能敲出一段段华丽的代码: HandlerThread handlerThread = new Ha ...

  8. Linux以下基于TCP多线程聊天室(server)

    接上篇博文,本文是server端的实现,主要实现的功能,就是现实client的连接.转发client发送的消息.以及client掉线提示等功能,同一时候能够在这这上面扩展和TCP以及线程相关的功能木块 ...

  9. UVA 11578 - Situp Benches(dp)

    题目链接:11578 - Situp Benches 题意:健♂身♂房有两个仰卧起坐坐垫,每次调整角度要花费10元/10度,每次使用要花费15,如今给定n个人的时间顺序,和所希望的角度,求最少花费 思 ...

  10. web前端面试系列 一 js闭包

    一.什么是闭包? JavaScript高级程序设计第三版: 闭包是指有权访问另一个函数作用域中的变量的函数. 在js中定义在函数内部的子函数能够访问外部函数定义的变量,因此js内部函数就是一个闭包. ...