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). 可以将装饰器理解 ...
随机推荐
- VsCode安装使用教程和插件安装方法
许多渗透方式都python写脚本,比较方便,写一下vscode和插件的安装办法,虽然不是很复杂,但是写一下做一下笔记: Visual Studio Code (简称 VS Code / VSC) 是一 ...
- WPF 附件路由事件
public class Person { public static readonly RoutedEvent NameChangedEvent = EventManager.RegisterRou ...
- commandBinding 的命令
<Window x:Class="WpfApplication1.Window29" xmlns="http://schemas.microsoft.com/win ...
- 【linux】less 命令详解
转自:https://www.cnblogs.com/GNblog/p/6932252.html less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极 ...
- linux 下的用户的管理
- Mysql 中隐式转换
案例一:条件字段函数操作 假设你现在维护了一个交易系统,其中交易记录表 tradelog 包含交易流水号(tradeid).交易员 id(operator).交易时间(t_modified)等字段.为 ...
- JDBC中级篇(MYSQL)——模拟从数据库中上传下载附件
注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package b_blob_clob; import java.io.BufferedOutputStream; import j ...
- 深入研究webpack之Tree Shaking相关属性sideEffects用处
Tree Shaking我原来也只是了解,这次碰巧深入研究了下,就写个博客记录一下,网上有很多讲Tree Shaking的,我写的这篇跟他们侧重点不一样 Tree Shaking相关的基础知识 1 w ...
- for in和for of的简单区别
//for in可以遍历数组和对象,但是for of只能遍历数组,不可以遍历对象 var arr = [1,4,5,6,7,8]; var obj = { name:'za', age:19, say ...
- MySQL-SQL基础
mysql> use test; Database changed mysql> create table emp(ename varchar(10),hirdate date,sal d ...