zoukankan      html  css  js  c++  java
  • php设计模式 Composite (组合模式)

    简介:这是php设计模式 Composite (组合模式)的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=339018' scrolling='no'>
    1 <?php
    2 /**
    3 * 组合模式
    4 *
    5 * 将对象组合成树形结构以表示"部分-整体"的层次结构,使得客户对单个对象和复合对象的使用具有一致性
    6 */
    7 abstract class MenuComponent
    8 {
    9 public function add($component){}
    10 public function remove($component){}
    11 public function getName(){}
    12 public function getUrl(){}
    13 public function display(){}
    14 }
    15
    16 class Menu extends MenuComponent
    17 {
    18 private $_items = array();
    19 private $_name = null;
    20
    21 public function __construct($name)
    22 {
    23 $this->_name = $name;
    24 }
    25
    26 public function add($component)
    27 {
    28 $this->_items[] = $component;
    29 }
    30
    31 public function remove($component)
    32 {
    33 $key = array_search($component,$this->_items);
    34 if($key !== false) unset($this->_items[$key]);
    35 }
    36
    37 public function display()
    38 {
    39 echo "-- ".$this->_name." ---------<br/>";
    40 foreach($this->_items as $item)
    41 {
    42 $item->display();
    43 }
    44 }
    45 }
    46
    47 class Item extends MenuComponent
    48 {
    49 private $_name = null;
    50 private $_url = null;
    51
    52 public function __construct($name,$url)
    53 {
    54 $this->_name = $name;
    55 $this->_url = $url;
    56 }
    57
    58 public function display()
    59 {
    60 echo $this->_name."#".$this->_url."<br/>";
    61 }
    62 }
    63
    64 class Client
    65 {
    66 private $_menu = null;
    67
    68 public function __construct($menu)
    69 {
    70 $this->_menu = $menu;
    71 }
    72
    73 public function setMenu($menu)
    74 {
    75 $this->_menu = $menu;
    76 }
    77
    78 public function displayMenu()
    79 {
    80 $this->_menu->display();
    81 }
    82 }
    83
    84 // 实例一下
    85 // 创建menu
    86 $subMenu1 = new Menu("sub menu1");
    87 $subMenu2 = new Menu("sub menu2");
    88 $subMenu3 = new Menu("sub menu3");
    89
    90 $item1 = new Item("163","www.163.com");
    91 $item2 = new Item("sina","www.sina.com");
    92
    93 $subMenu1->add($item1);
    94 $subMenu1->add($item2);
    95
    96 $item3 = new Item("baidu","www.baidu.com");
    97 $item4 = new Item("google","www.google.com");
    98 $subMenu2->add($item3);
    99 $subMenu2->add($item4);
    100
    101 $allMenu = new Menu("All Menu");
    102 $allMenu->add($subMenu1);
    103 $allMenu->add($subMenu2);
    104 $allMenu->add($subMenu3);
    105
    106 $objClient = new Client($allMenu);
    107 $objClient->displayMenu();
    108
    109 $objClient->setMenu($subMenu2);
    110 $objClient->displayMenu();

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/339018.html pageNo:8
  • 相关阅读:
    计数和查找
    遍历
    top小火箭
    leetcode 字符串中的第一个唯一字符
    leetcode 颠倒整数
    leetcode 反转字符串
    leetcode 有效的数独
    leetcode 两数之和
    leetcode 移动零
    leetcode 加一
  • 原文地址:https://www.cnblogs.com/ooooo/p/2246191.html
Copyright © 2011-2022 走看看