php 设计模式 --组合器模式
PHP 开启错误显示并设置错误报告级别
<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'on');
abstract class Company{
protected $name;
function __construct($name){
$this->name=$name;
}
abstract function Add(Company $company);
abstract function Remove(Company $company);
abstract function Display($depth);
} class SubCompany extends Company
{
private $sub_companys = array();
function __construct($name){
parent::__construct($name); }
public function Add(Company $company){
//echo 31;die;
$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."<br/>";
echo $pre; foreach ($this->sub_companys as $v ) {
$v->Display($depth+2);
}
}
} class MoneyDept extends Company
{ function __construct($name){
parent::__construct($name);
} function Add(Company $company){
echo "叶子节点,不能再添加。。。<br/>" ;
}
function Remove(Company $company) {
echo "叶子节点,不能再删除。。。<br/>";
}
function Display($depth) {
$pre = "";
for($i=0 ; $i<$depth; $i++){
$pre.="-";
}
$pre.=$this->name."<br/>";
echo $pre;
} } class ItDept extends Company
{ function __construct($name){
parent::__construct($name);
} function Add(Company $company){
echo "叶子节点,不能再添加。。。<br/>";
}
function Remove(Company $company) {
echo "叶子节点,不能再删除。。。<br/>";
}
function Display($depth) {
$pre = "";
for($i=0 ; $i<$depth; $i++){
$pre.="-";
}
$pre.=$this->name."<br/>";
echo $pre;
} } $root = new SubCompany("北京总公司");
//$a = new MoneyDept("总公司财务部");
$root->Add(new MoneyDept("总公司财务部"));
$root->Add(new ItDept("总公司技术部门")); $sh = new SubCompany("上海分公司");
$sh->Add(new MoneyDept("上海分公司财务部"));
$sh->Add(new ItDept("上海分公司技术部门"));
$root->Add($sh); $root->Display(1); echo "<br>";
$root->Remove($sh);
$root->Display(3);
php 设计模式 --组合器模式的更多相关文章
- 6. 星际争霸之php设计模式--建造器模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- JAVA设计模式--装饰器模式
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...
- C#设计模式-装饰器模式(Decorator Pattern)
引言 当我们完成一个软件产品开发后就需要对其进行各种测试,适配快速迭代下质量的保障.当有一个完善的产品的对象后,如果我们想要给他添加一个测试功能,那么我们可以用一个新的类去装饰它来实现对原有对象职责的 ...
- 设计模式-装饰器模式(Decrator Model)
文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/6057666.html 目录 1.概述 2.目的 3.结构组成 4.实现 5.总结 1.概 ...
- 说说设计模式~装饰器模式(Decorator)
返回目录 装饰器模式,也叫又叫装饰者模式,顾名思义,将一个对象进行包裹,包装,让它变成一个比较满意的对象,这种模式在我们平时项目开发中,经常会用到,事实上,它是处理问题的一种技巧,也很好的扩展了程序, ...
- Java设计模式--装饰器模式到Java IO 流
装饰器模式 抽象构件角色:给出一个抽象接口,以规范准备接受附加责任的对象. 具体构件角色:定义准备接受附加责任的对象. 抽象装饰角色:持有一个构件对象的实例,并对应一个与抽象构件接口一致的接口. 具体 ...
- C#设计模式--装饰器模式
0.C#设计模式-简单工厂模式 1.C#设计模式--工厂方法模式 2.C#设计模式--抽象工厂模式 3.C#设计模式--单例模式 4.C#设计模式--建造者模式 5.C#设计模式--原型模式 6.C# ...
- Head First 设计模式 —— 装饰器模式
1. 装饰器模式与继承 与装饰器模式相比,继承更容易造成类爆炸: 装饰器模式:利用组合取代继承:
- 从ES6重新认识JavaScript设计模式: 装饰器模式
1 什么是装饰器模式 向一个现有的对象添加新的功能,同时又不改变其结构的设计模式被称为装饰器模式(Decorator Pattern),它是作为现有的类的一个包装(Wrapper). 可以将装饰器理解 ...
随机推荐
- PHP变量覆盖漏洞整理
昨天群里HW的大佬们都在传某某服终端检测响应平台edr存在大量RCE的洞 官网上关于EDR的介绍是这么写的 终端检测响应平台EDR,围绕终端资产安全生命周期,通过预防.防御.检测.响应赋予终端更为细致 ...
- idea 生成 javaDoc
idea 生成 javaDoc 使用命令 Generate javaDoc - 直接输入javadoc就可以了 Generate JavaDoc scope 3个区域,一般选择第三项自定义,选择模块, ...
- [TcaplusDB知识库]数据库支撑底盘引擎计算层介绍
在上次的TcaplusDB知识库中,TcaplusDB君为大家讲解了TcaplusDB所用的基于HASH表的Key-value存储引擎TXHDB.存储引擎作为数据库的支撑底盘,其重要性无可置疑,而在本 ...
- 数据结构与算法-排序(十)桶排序(Bucket Sort)
摘要 桶排序和基数排序类似,相当于基数排序的另外一种逻辑.它是将取值范围当做创建桶的数量,桶的长度就是序列的大小.通过处理比较元素的数值,把元素放在桶的特定位置,然后遍历桶,就可以得到有序的序列. 逻 ...
- C++ leetcode接雨水
双指针算法"接雨水" 链接:https://leetcode-cn.com/problems/trapping-rain-water/ 给定 n 个非负整数表示每个宽度为 1 的柱 ...
- JSOUP教程目录
入门: 1.解析和遍历一个HTML文档 输入: 2.解析一个HTML字符串 3.解析一个body片断 4.从一个URL加载一个Document 5.从一个文件加载一个文档 数据抽取: 6.使用DOM方 ...
- ProjectEuler 008题
题目: The four adjacent digits in the 1000-digit number that have the greatest product are 9 9 8 9 = 5 ...
- 刷题-力扣-213. 打家劫舍 II
213. 打家劫舍 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/house-robber-ii/ 著作权归领扣网络所有.商业 ...
- 跨平台APP推荐收藏
时间:2019-04-11 整理:pangYuaner 标题:十大跨平台优秀软件 地址:https://www.cnblogs.com/the-king-of-cnblogs/p/3154758.ht ...
- Learning ROS: Ubuntu16.04下kinetic开发环境安装和初体验 Install + Configure + Navigating(look around) + Creating a Package(catkin_create_pkg) + Building a Package(catkin_make) + Understanding Nodes
本文主要部分来源于ROS官网的Tutorials. Ubuntu install of ROS Kinetic # Setup your sources.list sudo sh -c 'echo & ...