zoukankan      html  css  js  c++  java
  • 组合模式

    组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。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
      -------第四级目录

  • 相关阅读:
    开通了
    A computer hardware platform abstraction
    脑机接口入门概览
    JDK自带VM分析工具jps,jstat,jmap,jconsole
    泛型里的super和extend
    动态规划
    用二分法查找的套路(一)
    A computer hardware platform abstraction
    CentOS7安装JDK1.8
    CentOS7如何修改hostname
  • 原文地址:https://www.cnblogs.com/zhutianpeng/p/4230263.html
Copyright © 2011-2022 走看看