美文网首页
组合模式

组合模式

作者: 散装咖啡 | 来源:发表于2017-05-30 03:04 被阅读3次
/**
* combination模式
*
* 将对象组合成树形结构以表示"部分-整体"的层次结构,使得客户对单个对象
和复合对象的使用具有一致性
*/
    abstract class MenuComponent
    {
        public function add($component){}
        public function remove($component){}
        public function getName(){}
        public function getUrl(){}
        public function display(){}
    }

    class Menu extends MenuComponent
    {
        private $_items = array();
        private $_name = null;
        
        public function __construct($name)
        {
            $this->_name =$name;
        }
        
        public function add($component)
        {
            $this->_items[] =$component;
        }
        
        public function remove($component)
        {
            $key = array_search($component,$this->_items);
            if ($key!==false) {
                unset($this->_items[$key]);
            }
        }
        
        public function display()
        {
            echo "-- ".$this->_name . " ---------<br/>";
            foreach ($this->_items as $item) {
                $item->display();
            }
        }
    }
    
    class Item extends MenuComponent
    {
        private $_name = null;
        private $_url = null;
        
        public function __construct($name,$url)
        {
            $this->_name =$name;
            $this->_url =$url;
        }
        
        public function display()
        {
            echo $this->_name . "#" . $this->_url . "<br/>";
        }
    }
    
    class Client
    {
        private $_menu = null;
        
        public function __construct($menu)
        {
            $this->_menu =$menu;
        }
        
        public function setMenu($menu)
        {
            $this->_menu =$menu;
        }
        
        public function displayMenu()
        {
            $this->_menu->display();
        }
    }
    
// 实例一下
// 创建menu
$subMenu1=new Menu("sub menu1");
$subMenu2=new Menu("sub menu2");
$subMenu3=new Menu("sub menu3");

$item1=new Item("163","www.163.com");
$item2=new Item("sina","www.sina.com");
$subMenu1->add($item1);
$subMenu1->add($item2);
$item3=new Item("baidu","www.baidu.com");
$item4=new Item("google","www.google.com");
$subMenu2->add($item3);
$subMenu2->add($item4);

$allMenu=new Menu("All Menu");
$allMenu->add($subMenu1);
$allMenu->add($subMenu2);
$allMenu->add($subMenu3);

$objClient=new Client($allMenu);

$objClient->displayMenu();
$objClient->setMenu($subMenu2);
$objClient->displayMenu();

参考文章 https://wenku.baidu.com/view/b4c78b4702768e9951e738fb.html

相关文章

  • 设计模式:组合模式 职责链模式

    组合模式 职责链模式 组合模式 组合模式将对象组合成树形结构,以表示“部分-整体”的层次结构。 在组合模式的树形结...

  • 第4章 结构型模式-组合模式

    一、组合模式简介 二、组合模式的优缺点 三、组合模式的使用场景 、组合模式的实例

  • 组合模式(统一叶子与组合对象)

    目录 从生活场景出发,映射组合模式 组合模式的理论概念 组合模式的实现 组合模式在源码中的应用 组合 “优于” 继...

  • 组合模式

    1. 组合模式 1.1 组合模式的定义 组合模式(Composite): 又称部分-整体模式, 将对象组合成树形结...

  • 组合模式

    设计模式系列7--组合模式 《Objective-c 编程之道 iOS 设计模式解析》 - 组合模式 常见组合模式...

  • 设计模式 | 组合模式及典型应用

    本文的主要内容: 介绍组合模式 示例 组合模式总结 源码分析组合模式的典型应用java.awt中的组合模式Java...

  • 组合模式

    一、组合模式介绍 二、组合模式代码实例

  • 组合模式

    设计模式之组合模式 什么是组合模式? 组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以...

  • 15、组合模式(Composite Pattern)

    1. 组合模式 1.1 简介   Composite模式,即组合模式,又叫部分整体模式。Composite模式将对...

  • 组合模式原型解析

    组合模式定义: 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象...

网友评论

      本文标题:组合模式

      本文链接:https://www.haomeiwen.com/subject/ejglfxtx.html