当前位置 主页 > 服务器问题 > Linux/apache问题 >

    PHP设计模式之组合模式定义与应用示例

    栏目:Linux/apache问题 时间:2020-02-05 22:11

    本文实例讲述了PHP设计模式之组合模式定义与应用。分享给大家供大家参考,具体如下:

    <?php
    /**
     * 组合模式
     *
     * 将对象组合成树形结构以表示"部分-整体"的层次结构,使得客户对单个对象和复合对象的使用具有一致性
     */
    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 . " --------- \r\n ";
        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 . " \r\n ";
      }
    }
    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();
      }
    }
    // 实例一下
    // 人
    $item3 = new Item("baidu", "www.baidu.com");
    $item4 = new Item("google", "www.google.com");
    $item1 = new Item("163", "www.163.com");
    $item2 = new Item("sina", "www.sina.com");
    // 班级
    $subMenu1 = new Menu("sub menu1");
    $subMenu1->add($item1);
    $subMenu1->add($item2);
    $subMenu2 = new Menu("sub menu2");
    $subMenu2->add($item3);
    $subMenu2->add($item4);
    $subMenu3 = new Menu("sub menu3");
    $subMenu3->add($item3);
    $subMenu3->add($item4);
    // 所有班级
    $allMenu = new Menu("All Menu");
    $allMenu->add($subMenu1);
    $allMenu->add($subMenu2);
    $allMenu->add($subMenu3);
    // 打印所有班级
    $objClient = new Client($allMenu);
    $objClient->displayMenu();
    // 打印第2 班级
    $objClient->setMenu($subMenu2);
    $objClient->displayMenu();
    ?>
    
    

    运行结果:

    -- All Menu ---------
     -- sub menu1 ---------
     163#www.163.com 
     sina#www.sina.com
     -- sub menu2 ---------
     baidu#www.baidu.com
     google#www.google.com
     -- sub menu3 ---------
     baidu#www.baidu.com
     google#www.google.com
     -- sub menu2 ---------
     baidu#www.baidu.com
     google#www.google.com

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》