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 相关文章推荐
php中禁止单个IP与ip段访问的代码小结
Jul 04 PHP
探讨php中遍历二维数组的几种方法详解
Jun 08 PHP
php中的boolean(布尔)类型详解
Oct 28 PHP
PHP中开启gzip压缩的2种方法
Jan 31 PHP
php调用KyotoTycoon简单实例
Apr 02 PHP
php实现中文字符截取防乱码方法汇总
Apr 29 PHP
php判断表是否存在的方法
Jun 18 PHP
PHP批量去除BOM头内容信息代码
Mar 11 PHP
php设计模式之单例模式代码
Jun 11 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Dec 14 PHP
PHP获取路径和目录的方法总结【必看篇】
Mar 04 PHP
Laravel修改验证提示信息为中文的示例
Oct 23 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连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
php中的静态变量的基本用法
2014/03/20 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
php实现连接access数据库并转txt写入的方法
2017/02/08 PHP
PHP判断一个变量是否为整数、正整数的方法示例
2019/09/11 PHP
简单几行JS Code实现IE邮件转发新浪微博
2013/07/03 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
javascript 判断两个日期之差的示例代码
2015/09/05 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
2016/12/23 Javascript
支持移动端原生js轮播图
2017/02/16 Javascript
Vue和Bootstrap的整合思路详解
2017/06/30 Javascript
解决webpack无法通过IP地址访问localhost的问题
2018/02/22 Javascript
微信小程序实现图片上传
2019/05/23 Javascript
vue-resource:jsonp请求百度搜索的接口示例
2019/11/09 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
2020/02/12 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
Python 实现淘宝秒杀的示例代码
2018/01/02 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
python lambda表达式(匿名函数)写法解析
2019/09/16 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
女性时尚在线:IVRose
2019/02/23 全球购物
Fox Racing官方网站:越野摩托车和山地自行车装备和服装
2019/12/23 全球购物
师范大学应届生求职信
2013/11/21 职场文书
上班早退检讨书
2014/01/09 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
2014年度思想工作总结
2014/11/27 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
安阳殷墟导游词
2015/02/10 职场文书
创业计划书之干洗店
2019/09/10 职场文书
python基础之函数的定义和调用
2021/10/24 Python