zoukankan      html  css  js  c++  java
  • php 设计模式 --组合器模式

    PHP 开启错误显示并设置错误报告级别

    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 'on');
     
    目的:分级处理;整体与结构 树结构;
    <?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);
  • 相关阅读:
    iterm2 Mac 常用快捷键
    软件测试:测试方法
    maccms(苹果cms)采集过程报错--MySQL server has gone away错误的解决办法
    ArrayLIst的使用
    hashmap的使用
    hashset机LinkedHashSet的使用
    java集合Collection总结
    maxPostSize属性改变tomcat的post请求的请求体大小设置
    postman中 form-data、x-www-form-urlencoded、raw、binary的区别
    用synchronized关键字及concurrent.locks解决线程并发问题
  • 原文地址:https://www.cnblogs.com/songyanan/p/12063321.html
Copyright © 2011-2022 走看看