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 相关文章推荐
多重?l件?合查?(二)
Oct 09 PHP
深入理解PHP中的Session和Cookie
Jun 21 PHP
PHP Class&amp;Object -- 解析PHP实现二叉树
Jun 25 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
Jul 19 PHP
PHP 使用pcntl和libevent 实现Timer功能
Oct 27 PHP
PHP解析目录路径的3个函数总结
Nov 18 PHP
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
Dec 05 PHP
编写PHP脚本过滤用户上传的图片
Jul 03 PHP
PHP常用设计模式之委托设计模式
Feb 13 PHP
PHP设置Cookie的HTTPONLY属性方法
Feb 09 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
PHP fprintf()函数用法讲解
Feb 16 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
基于empty函数的输出详解
2013/06/17 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
2019/04/17 PHP
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
JavaScript实现按照指定长度为数字前面补零输出的方法
2015/03/19 Javascript
javascript数组随机排序实例分析
2015/07/22 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
js实现简单扫雷
2020/11/27 Javascript
python绘图方法实例入门
2015/05/19 Python
Python 中的with关键字使用详解
2016/09/11 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
解决django后台管理界面添加中文内容乱码问题
2019/11/15 Python
python 计算积分图和haar特征的实例代码
2019/11/20 Python
Python 日期的转换及计算的具体使用详解
2020/01/16 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
应届生财务会计求职信
2013/11/05 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
绿里奇迹观后感
2015/06/15 职场文书
昆虫记读书笔记
2015/06/26 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python
如何利用Python实现一个论文降重工具
2021/07/09 Python
分析SQL窗口函数之聚合窗口函数
2022/04/21 Oracle
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle