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项目的方法
Oct 09 PHP
php中serialize序列化与json性能测试的示例分析
Apr 27 PHP
基于PHP5魔术常量与魔术方法的详解
Jun 13 PHP
PHP三元运算的2种写法代码实例
May 12 PHP
非常好用的Zend Framework分页类
Jun 25 PHP
php获取发送给用户的header信息的方法
Mar 16 PHP
php自动更新版权信息显示的方法
Jun 19 PHP
PHP使用NuSOAP调用Web服务的方法
Jul 18 PHP
PHP之正则表达式捕获组与非捕获组(详解)
Jul 29 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
Jun 07 PHP
php生成word并下载代码实例
Mar 15 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
Jul 08 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自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
php检测文件编码的方法示例
2014/04/25 PHP
PHP源码分析之变量的存储过程分解
2014/07/03 PHP
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
js实现连续英文字符自动换行兼容ie6 ie7和firefox
2013/09/06 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
Jquery遍历节点的方法小集
2014/01/22 Javascript
javascript消除window.close()的提示窗口
2015/05/20 Javascript
解决JS请求服务器gbk文件乱码的问题
2015/10/16 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
JS继承之借用构造函数继承和组合继承
2016/09/07 Javascript
JS实现页面打印(整体、局部)
2017/08/18 Javascript
vuejs实现折叠面板展开收缩动画效果
2018/09/06 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
2019/05/22 Javascript
24行JavaScript代码实现Redux的方法实例
2019/11/17 Javascript
nodejs nedb 封装库与使用方法示例
2020/02/06 NodeJs
解析Python编程中的包结构
2015/10/25 Python
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
Python的条件表达式和lambda表达式实例
2019/01/31 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
西安众合通用.net笔试题
2013/03/18 面试题
经典导游欢迎词大全
2014/01/16 职场文书
让世界充满爱观后感
2015/06/10 职场文书
保护环境建议书作文400字
2015/09/14 职场文书
Python进度条的使用
2021/05/17 Python