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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • @(架构之路之设计模式代码) 设计模式之合成模式 欢迎关注作者简书csdn传送门 [TOC]   合成模式属于对象...
    阿祥小王子阅读 5,252评论 0 1
  • 定义 属于对象的结构模式,有时又叫做“部分——整体”模式。组合模式将对象组织到树结构中,可以用来描述整体和部分的关...
    步积阅读 3,370评论 2 7
  • 做交易的人不也在经历着六道轮回吗? 赚到大钱、在交易上修成正果、生活悠哉的,就像在天道。 有盈利能力,杀气重,在市...
    master王峰阅读 465评论 0 1
  • 讨伐着麦穗的农民 脸上堆满了喜悦 趁夏日暖风徐徐 收割着一日又一日的太阳 捧起的是劳动人民的智慧 顺天应时,耕土施...
    桃山妖孽阅读 232评论 0 0
  • 文/F孤 说起来也是个偶然,我不经意间看到在朋友圈转发的文章,一点进去是来自简书的。 对于我来说简书是个新的软件,...
    F孤阅读 366评论 0 1