初识PHP设计模式--组合模式

 组合器(Composite)模式,属于设计模式中的结构型模式之一,主要用途就是把多个对象组合成一个树状的结构来表示“整体—部分”的关系。
 举例说明:我们用树状图来表示 江苏省->南京市->秦淮区和建邺区。
 其中江苏省为一级,南京市属于江苏省作为二级,而建邺区和秦淮区并列属于南京市属于三级。
 就得到如图结构:


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

 而组合器模式的作用就是,客户端通过一个相同的方法将对象进行组合并且区分出主从级别,提高灵活性和扩展性。

<?php
/**       
 * Created by Sublime.       
 * User: Ryan       
 * Date: 2018/1/23       
 * File:Composite.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(); // 显示



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值