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. (39)C#Ping类

    一.Ping类 引用命名空间 using System.Net.NetworkInformation 控制台版 using System; using System.Collections.Gener ...

  2. HDU 5972 Regular Number(字符串shift - and算法)

    题目链接  HDU5972 2016 ACM/ICPC 大连区域赛 B题 我们预处理出$b[i][j]$,$b[i][j] = 1$的意义是数字$i$可以放在第$j$位. 然后就开始这个匹配的过程. ...

  3. jQuery实现tab选项卡效果小demo

    html页面: <section> <h2>Section Title</h2> <ul class="tab-nav"> < ...

  4. 证书锁定Certificate Pinning技术

    证书锁定Certificate Pinning技术   在中间人攻击中,攻击主机通常截断客户端和服务器的加密通信.攻击机以自己的证书替代服务器发给客户端的证书.通常,客户端不会验证该证书,直接接受该证 ...

  5. UVA - 10615 Rooks

    建一下模,把行和列看成二分图的点,把车看成是二分图中的边,这样就变成了上一个博客的问题. 我们每次新加一条边,就把它加入一条 这条边两端点最小没有出现的颜色  交替出现的路径中去. #include& ...

  6. Play框架的用户验证。

    最近刚刚参与一个基于Play框架的管理平台的升级工作,其中涉及到了用户的验证工作.第一次接触play框架,直接看已有代码,有点晕.因此,自己实现了一个简单的用户验证功能. 首先,新建一个User类,包 ...

  7. Java并发学习 & Executor学习 & 异常逃逸 & 同步互斥Best Practice & wait/notify, conditon#await/signal

    看了这篇文章:http://www.ciaoshen.com/2016/10/28/tij4-21/ 有一些Java并发的内容,另外查了一些资料. 朴素的Thread 首先,Java中关于线程Thre ...

  8. NGUI版虚拟摇杆

    以下是我用nui实现的一个虚拟摇杆. 1,示图 2.代码例如以下,都有比較具体的凝视.就不说明了. using UnityEngine; using System.Collections; using ...

  9. 关于Oracle中sysoper这个系统权限的问题

    我们都知道Oracle数据库安装完之后.默认的会有这样几个系统角色或权限.nomal,sysdba,sysoper等等,之前每次登录Oracle的时候.都是直接以conn / as sysdba 的身 ...

  10. C++11 并发指南二(std::thread 详解)(转)

    上一篇博客<C++11 并发指南一(C++11 多线程初探)>中只是提到了 std::thread 的基本用法,并给出了一个最简单的例子,本文将稍微详细地介绍 std::thread 的用 ...