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 相关文章推荐
建立文件交换功能的脚本(二)
Oct 09 PHP
php 对输入信息的进行安全过滤的函数代码
Jun 29 PHP
php实现mysql数据库操作类分享
Feb 14 PHP
php调用c接口无错版介绍
Mar 11 PHP
PHP使用glob函数遍历目录或文件夹的方法
Dec 16 PHP
PHP语法小结之基础和变量
Nov 22 PHP
使用Zookeeper分布式部署PHP应用程序
Mar 15 PHP
PHP二维索引数组的遍历实例分析【2种方式】
Jun 24 PHP
Laravel框架中缓存的使用方法分析
Sep 06 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 PHP
自定义Laravel (monolog)日志位置,并增加请求ID的实现
Oct 17 PHP
Laravel + Elasticsearch 实现中文搜索的方法
Feb 02 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学习散记_编码(json_encode 中文不显示)
2011/11/10 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
学习面向对象之面向对象的术语
2010/11/30 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
Bootstrap源码解读媒体对象、列表组和面板(10)
2016/12/26 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
JavaScript判断输入是否为数字类型的方法总结
2017/09/28 Javascript
全新打包工具parcel零配置vue开发脚手架
2018/01/11 Javascript
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
2018/12/17 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
2018/12/21 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
详解Typescript 内置的模块导入兼容方式
2020/05/31 Javascript
使用Python获取Linux系统的各种信息
2014/07/10 Python
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
Python搜索引擎实现原理和方法
2017/11/27 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
Python K最近邻从原理到实现的方法
2019/08/15 Python
python图片合成的示例
2020/11/09 Python
潘多拉珠宝英国官方网上商店:PANDORA英国
2018/06/12 全球购物
迪奥美国官网:Dior美国
2019/12/07 全球购物
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
运动会表扬稿大全
2014/01/16 职场文书
财务简历的自我评价
2014/03/05 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
发布会邀请函
2015/01/31 职场文书
开学典礼校长致辞
2015/07/29 职场文书
Mysql实现主从配置和多主多从配置
2021/06/02 MySQL
python 字典和列表嵌套用法详解
2021/06/29 Python