首页 >后端开发 >php教程 >PHP设计模式之 组合模式

PHP设计模式之 组合模式

不言
不言原创
2018-04-18 11:55:091521浏览

 这篇文章介绍的内容是关于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