首頁 >後端開發 >php教程 >PHP設計模式之 組合模式

PHP設計模式之 組合模式

不言
不言原創
2018-04-18 11:55:091538瀏覽

 這篇文章介紹的內容是關於PHP設計模式之組合模式,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

 組合器(Composite)模式,屬於設計模式中的結構型模式之一,主要用途就是把多個物件組合成一個樹狀的結構來表示「整體—部分」的關係。
 舉例:我們用樹狀圖表示 江蘇省->南京市->秦淮區和建鄴區。
 其中江蘇省為一級,南京市屬於江蘇省作為二級,而建鄴區和秦淮區並列屬於南京市屬於三級。
 就得到如圖結構:


#
-->江苏省          1级
-->-->南京市       2级
-->-->-->秦淮区    3级
-->-->-->建邺区    3级




## 而組合器模式的作用就是,客戶端透過一個相同的方法將物件進行組合並且區分出主從級別,提高靈活性和擴展性。

<?php  
         
      
/** 抽象一个总组合器类     
 *  abstract IComposite          
 */   
abstract Class IComposite  
{  
   protected $name;  
   function __construct($name)  
   {  
      $this->name = $name;  
   }  
   abstract function Add(IComposite $place);  
  
   abstract function Display($level);  
}  
  
/** 组合器类 供客户端调用 
 *  Composite          
 */  
Class Composite extends IComposite  
{  
   private $places = array();  
  
   function __construct($name)  
   {   
      parent::__construct($name);  
   }  
  
   function Add(IComposite $place)  
   {  
      $this->places[] = $place;  
   }  
  
/** 显示方法 
 *  Display  
 *  $level 级别 默认江苏省为 1级       
 */  
   function Display($level = "1")  
   {  
      $pre = "";  
  
      for ($i=0; $i < $level; $i++) {   
          $pre.= "-->";  
      }  
      $pre.=$this->name."<br/>";  
      echo $pre;  
  
      foreach ($this->places as $v) {  
          // 往后南京市 级别加1 秦淮区在南京市基础上再加1  
         $v->display($level+1);   
      }  
  
   }  
}
<?php  
  
// 组合器模式  index.php  
header("Content-Type:text/html;charset=utf-8");  
  
require_once "Composite.php"; // Composite.php  
  
// 先处理江苏省  
$jiangsu = new Composite("江苏省");  
  
// 再处理南京市  
$nanjing = new Composite("南京市");  
  
// 最后处理秦淮区和建邺区  
$qinhuai = new Composite("秦淮区");   
$jianye = new Composite("建邺区");  
  
// 把南京添加到江苏省下  
$jiangsu->Add($nanjing);  
  
// 把秦淮区和建邺区添加到南京市下  
$nanjing->Add($qinhuai);  
$nanjing->Add($jianye);  
  
$jiangsu->Display(); // 显示
###相關推薦:#########PHP設計模式之橋接模式############PHP設計模式之適配器模式#### ########PHP設計模式之建造者模式#########################

以上是PHP設計模式之 組合模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn