php与设计模式-合成模式

合成模式

合成模式把部分和整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和有他们复合而成的合成对象同等看待。
用户复制文件及文件夹都是同样的操作。

Demo

/**
* 抽象组件角色
*/
interface Component {
   /**
    * 返回自己的实例
    */
   public function getComposite();
   /**
    * 示例方法
    */
   public function operation();
}
/**
* 树枝组件角色
*/
class Composite implements Component {
   private $_composites;
   public function __construct() {
       $this->_composites = array();
   }
   public function getComposite() {
       return $this;
   }
   /**
    * 示例方法,调用各个子对象的operation方法
    */
   public function operation() {
       echo 'Composite operation begin:<br />';
       foreach ($this->_composites as $composite) {
           $composite->operation();
       }
       echo 'Composite operation end:<br /><br />';
   }
   /**
    * 聚集管理方法 添加一个子对象
    * @param Component $component 子对象
    */
   public function add(Component $component) {
       $this->_composites[] = $component;
   }
   /**
    * 聚集管理方法 删除一个子对象
    * @param Component $component 子对象
    * @return boolean 删除是否成功
    */
   public function remove(Component $component) {
       foreach ($this->_composites as $key => $row) {
           if ($component == $row) {
               unset($this->_composites[$key]);
               return TRUE;
           }
       }
       return FALSE;
   }
   /**
    * 聚集管理方法 返回所有的子对象
    */
   public function getChild() {
       return $this->_composites;
   }
}
class Leaf implements Component {
   private $_name;
   public function __construct($name) {
       $this->_name = $name;
   }
   public function operation() {
       echo 'Leaf operation ', $this->_name, '<br />';
   }
   public function getComposite() {
       return null;
   }
}
/**
* 客户端
*/
class Client {
   public static function main() {
       $leaf1 = new Leaf('first');
       $leaf2 = new Leaf('second');
       $composite = new Composite();
       $composite->add($leaf1);
       $composite->add($leaf2);
       $composite->operation();
       $composite->remove($leaf2);
       $composite->operation();
   }
}
Client::main();

请关注我的订阅号

订阅号.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值