• 组合模式


    组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。引用场景如树形结构,父子的操作具有一致性。

    类图如下:

    典型的组合模式对象结构图:

    php实现:

    <?php
    abstract class Component{
        function __construct($strName){
            $this->m_strName = $strName;
        }
        abstract function Add($com);
        protected function Remove($com){}
        abstract function Display($nDepth);
    
    }
    
    class Leaf extends Component{
        function Add($com){
            print_r("Leaf can't add!");
        }
        function Display($nDepth){
            $strtemp = "";
            for($i=0;$i<$nDepth;$i++){
                $strtemp.="-";
            }
            $strtemp=$strtemp.($this->m_strName)."
    ";
            print_r($strtemp);
        }
    }
    
    class Composite extends Component{
        protected $m_strName="";
        protected $c=array();
        function __construct($strName){
            $this->m_strName = $strName;
        }
        function Add($com){
            $this->c[] = $com;
        }
        function Remove($com){
            $key = array_search($com, $this->c);
            if($key != false)unset($this->c[$key]);
        }
        function Display($nDepth){
            $strtemp = "";
            for($i=0;$i<$nDepth;$i++){
                $strtemp.="-";
            }
            $strtemp=$strtemp.($this->m_strName)."
    ";
            print_r($strtemp);
            foreach($this->c as $v){
                $v->Display($nDepth+2);
            }
        }
    }
    
    $p = new Composite("第一级目录");
    $p->Add(new Leaf("第二级目录1"));
    $s1 = new Leaf("第二级目录2");
    $p->Add($s1);
    $s2 = new Composite("第二级目录3");
    $s2->Add(new Leaf("第三级目录1"));
    $t1 = new Composite("第三级目录2");
    $t1->Add(new Leaf("第四级目录"));
    $s2->Add($t1);
    $p->Add($s2);
    $p->Remove($s1);
    $p->Display(1);
    

      执行结果如下:

      -第一级目录
      ---第二级目录1
      ---第二级目录3
      -----第三级目录1
      -----第三级目录2
      -------第四级目录

  • 相关阅读:
    c# 启动线程的方式
    c# 打开文件夹获取所有文件
    windows server 2008 R2 SP1 安装SQL Server 2008 R2时提示 "此操作系统不支持此版本的 SQL Server 版本"
    mongodb 备份 指定用户名密码
    c# 线程启动的两种方式与传参
    vs 2015 密钥
    c# 时间格式yyyy-MM-ddTHH:mm:ss
    c# oledb sql 报错 标准表达式中数据类型不匹配
    CentOS下yum安装dnsmasq,并强制替换为最新版
    使用QUOTA(磁盘配额)来限制用户空间
  • 原文地址:https://www.cnblogs.com/zhutianpeng/p/4230263.html
Copyright © 2020-2023  润新知