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


Posted in PHP onFebruary 01, 2020

本文实例讲述了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 相关文章推荐
phpexcel导出excel的颜色和网页中的颜色显示不一致
Dec 11 PHP
对PHP语言认识上需要避免的10大误区
Jun 12 PHP
使用PHP函数scandir排除特定目录
Jun 12 PHP
php 使用file_get_contents读取大文件的方法
Nov 13 PHP
php通过asort()给关联数组按照值排序的方法
Mar 18 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
Feb 01 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
Jul 18 PHP
php断点续传之文件分割合并详解
Dec 13 PHP
PHP缩略图生成和图片水印制作
Jan 07 PHP
Yii2中简单的场景使用介绍
Jun 02 PHP
Laravel框架集合用法实例浅析
May 14 PHP
php实现的简单多进程服务器类完整示例
Feb 01 #PHP
laravel 框架执行流程与原理简单分析
Feb 01 #PHP
laravel框架学习笔记之组件化开发实现方法
Feb 01 #PHP
php正则表达式使用方法整理集合
Jan 31 #PHP
laravel邮件发送的实现代码示例
Jan 31 #PHP
laravel5.6 框架邮件队列database驱动简单demo示例
Jan 26 #PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
Jan 26 #PHP
You might like
php函数之子字符串替换&amp;#65279; str_replace
2011/03/23 PHP
解析php中获取系统信息的方法
2013/06/25 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
2020/06/02 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
JQuery实现动态表格点击按钮表格增加一行
2014/08/24 Javascript
node.js集成百度UE编辑器
2015/02/05 Javascript
canvas绘制七巧板
2017/02/03 Javascript
jQuery动画_动力节点节点Java学院整理
2017/07/04 jQuery
angularjs2中父子组件的数据传递的实例代码
2017/07/05 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
在vue中实现嵌套页面(iframe)
2020/07/30 Javascript
解决VantUI popup 弹窗不弹出或无蒙层的问题
2020/11/03 Javascript
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
Python中os和shutil模块实用方法集锦
2014/05/13 Python
利用Python脚本实现ping百度和google的方法
2017/01/24 Python
Python 中 list 的各项操作技巧
2017/04/13 Python
python中协程实现TCP连接的实例分析
2018/10/14 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
Python Selenium参数配置方法解析
2020/01/19 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
Python while true实现爬虫定时任务
2020/06/08 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
鲜果饮品店创业计划书
2014/01/21 职场文书
《燕子专列》教学反思
2014/02/21 职场文书
保险公司开门红口号
2014/06/21 职场文书
党员一帮一活动总结
2014/07/08 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
2014年老干部工作总结
2014/11/21 职场文书
python四种出行路线规划的实现
2021/06/23 Python
Redis如何使用乐观锁(CAS)保证数据一致性
2022/03/25 Redis