php设计模式之--组合模式
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设计模式之--组合模式的更多相关文章
- C#设计模式(10)——组合模式(Composite Pattern)
一.引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象 ...
- c++设计模式15 --组合模式
今天研究了一下设计模式15 组合模式 本人是菜鸟一枚,所以一开始完全不懂组合究竟是什么意思.先上图一张,树形结构图: 文档说,如果想做出这样的结构,通常考虑组合模式.那是为什么呢?现在让我们看一下组合 ...
- 乐在其中设计模式(C#) - 组合模式(Composite Pattern)
原文:乐在其中设计模式(C#) - 组合模式(Composite Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 组合模式(Composite Pattern) 作者:weba ...
- JavaScript设计模式之----组合模式
javascript设计模式之组合模式 介绍 组合模式是一种专门为创建Web上的动态用户界面而量身制定的模式.使用这种模式可以用一条命令在多个对象上激发复杂的或递归的行为.这可以简化粘合性代码,使其更 ...
- C#设计模式(10)——组合模式(Composite Pattern)(转)
一.引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象 ...
- C#设计模式:组合模式(Composite Pattern)
一,C#设计模式:组合模式(Composite Pattern) using System; using System.Collections.Generic; using System.Linq; ...
- 【GOF23设计模式】组合模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_组合模式.树状结构.杀毒软件架构.JUnite底层架构.常见开发场景 package com.test.composite ...
- 设计模式:组合模式(Composite)
定 义:将对象组合树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象使用具有一致性. 结构图: Component类: abstract class Component ...
- [设计模式] 8 组合模式 Composite
DP书上给出的定义:将对象组合成树形结构以表示“部分-整体”的层次结构.组合使得用户对单个对象和组合对象的使用具有一致性.注意两个字“树形”.这种树形结构在现实生活中随处可见,比如一个集团公司,它有一 ...
- 再起航,我的学习笔记之JavaScript设计模式15(组合模式)
组合模式 组合模式(Composite): 又称部分-整体模式,将对象组合成树形结构以表示"部分整体"的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 如果有一个 ...
随机推荐
- js 版本号比较方
function compareVersion(v1, v2) { v1 = v1.split('.') v2 = v2.split('.') const len = Math.max(v1.leng ...
- 最小生成树-prim算法模板
题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M<= ...
- ruti
也许我可以说除了我把+号写成了-号这个程序几乎是完美的
- 017.View与窗口:AttachInfo
每一个View都需要依赖于窗口来显示,而View和窗口的关系则是放在View.AttachInfo中,关于View.AttachInfo的文章少,因为这个是View的内部类而且不是公共的,在应用层用的 ...
- gitignore 规则
在使用git的过程中,总有一些我们不想被跟踪的文件,例如vim的交换文件,编译产生的文件等等.这时,我们可以在项目的根目录下创建一个名为 .gitignore 的文件,列出不想被跟踪的文件模式即可.下 ...
- SolidEdge 工程图中如何给零件添加纹理或贴图
格式-检视-勾选纹理 选中一个零件之后,点击格式-面,在纹理选项卡中找到纹理的贴图 最后效果如下图所示,如果不勾选检视纹理,则虽然的确贴图了,但是不显示出来给你看.如果贴图文件没了,也不会显示 ...
- [LeetCode][Java] Combinations
题目: Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For ex ...
- javascript变量初始化位置
变量在之前<script type="text/javascript"></script>(或引用的js文件)中初始化,可以正常访问. 运行程序:弹出123 ...
- python(11)- 文件处理
文件操作 1.1 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下: 昨夜寒蛩不住鸣. 惊回千里梦,已三更. 起来独自绕阶行. 人悄悄,帘外月胧明 ...
- vim 查找整个工程
1. 使用vim内置搜索引擎 vimgrep 格式::vim /patern/gj ** 命令::vim 或者 :vimgrep 模式: 查询模式包含在 / / 之间 参数: g 表示将同一行搜到的关 ...