zoukankan      html  css  js  c++  java
  • 一天一个设计模式(9)——组合模式

    组合模式

      将对象组合成树形结构以表示“部分-整体”的层次结构。这种模式的关键在于类中创建了一个包含自己对象的属性集合。

    应用

      菜单设计,文件夹结构等。

    实例

    <?php
    
    class Menu
    {
        /**
         * @var string
         */
        private $_name;
        /**
         * @var Menu[]
         */
        private $_subMenus;
    
        function __construct($name)
        {
            $this->_name = $name;
            $this->_subMenus = [];
        }
    
        function addSubMenu($menu)
        {
            $this->_subMenus[] = $menu;
        }
    
        function removeSubMenu($menu)
        {
            foreach ($this->_subMenus as $index => $subMenu) {
                if ($subMenu == $menu)
                    unset($this->_subMenus[$index]);
            }
        }
    
        function getSubMenus()
        {
            return $this->_subMenus;
        }
    
        function toString()
        {
            echo $this->_name . "
    ";
        }
    }
    
    $root = new Menu('功能菜单');
    $headMenu1 = new Menu('设置');
    $headMenu2 = new Menu('管理');
    
    $subMenu1 = new Menu('更新系统');
    $subMenu2 = new Menu('关闭系统');
    $subMenu3 = new Menu('用户系统');
    $subMenu4 = new Menu('用户组系统');
    
    $root->addSubMenu($headMenu1);
    $root->addSubMenu($headMenu2);
    
    $headMenu1->addSubMenu($subMenu1);
    $headMenu1->addSubMenu($subMenu2);
    $headMenu2->addSubMenu($subMenu3);
    $headMenu2->addSubMenu($subMenu4);
    
    $root->toString();
    foreach ($root->getSubMenus() as $headMenu) {
        $headMenu->toString();
        foreach ($headMenu->getSubMenus() as $subMenu) {
            $subMenu->toString();
        }
    }
    Bin_x

    本文来自博客园,作者:Bin_x,转载请注明原文链接:https://www.cnblogs.com/Bin-x/p/design9.html

  • 相关阅读:
    golang-uuid
    golang-random随机数
    git status检测不到文件变化
    vimium
    go1.11新特性,mark一下
    HTML网页滚动加载--mark一下
    docker-清理none镜像等操作
    golang websocket
    postman 快捷方式--启动图标
    tmux基本操作
  • 原文地址:https://www.cnblogs.com/Bin-x/p/design9.html
Copyright © 2011-2022 走看看