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 相关文章推荐
Windows下的PHP5.0安装配制详解
Sep 05 PHP
利用 window_onload 实现select默认选择
Oct 09 PHP
NOT NULL 和NULL
Jan 15 PHP
Zend的Registry机制的使用说明
May 02 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
Jun 06 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
Jun 28 PHP
php判断电脑访问、手机访问的例子
May 10 PHP
php上传图片之时间戳命名(保存路径)
Aug 15 PHP
PHP实现根据图片色界在不同位置加水印的方法
Aug 08 PHP
Symfony2联合查询实现方法
Mar 18 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
Jul 13 PHP
thinkphp5 加载静态资源路径与常量的方法
Dec 24 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代码
2012/07/14 PHP
php去除头尾空格的2种方法
2015/03/16 PHP
PHP简单遍历对象示例
2016/09/28 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
PHP htmlspecialchars()函数用法与实例讲解
2019/03/08 PHP
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
js实现下拉框选择要显示图片的方法
2015/02/16 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
jQuery动态添加
2016/04/07 Javascript
jquery轮播的实现方式 附完整实例
2016/07/28 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
webpack打包多页面的方法
2018/11/30 Javascript
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
如何优雅地在Node应用中进行错误异常处理
2019/11/25 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
Python定时执行之Timer用法示例
2015/05/27 Python
python检查字符串是否是正确ISBN的方法
2015/07/11 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
Python操作rabbitMQ的示例代码
2019/03/19 Python
使用Python制作简单的小程序IP查看器功能
2019/04/16 Python
Python 寻找局部最高点的实现
2019/12/05 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
岗位职责风险点
2014/03/12 职场文书
大学军训决心书
2015/02/05 职场文书
go结构体嵌套的切片数组操作
2021/04/28 Golang
Django cookie和session的应用场景及如何使用
2021/04/29 Python