PHP:设计模式之组合模式

【学习笔记】人群归因分数 PAF 以及combined PAF 人群归因风险比例(Population Attributable Fraction,PAF)是一个流行病学指标,它估计了在总体中,如果能消除一个特定的危险因素,能预防多少百分比的疾病或健康结果。简单来说,PAF回答的是:“如果没有这个风险因素,总体中会有多少病例是可以避免的? 阅读详情

单例模式和工厂模式都属于创建型模式:它们被用来产生一个或多个对象。另外一种设计模式的分类叫做结构型模式。这些模式比较适合用于当需要使用一个非传统的类结构或者一个现有的类结构的修改版本的时候。为了进一步介绍结构性模式,我们来看一看组合模式(Composite pattern)。

一种表明可能要使用组合模式的迹象是,我们正在处理的是一个树状的数据结构。

要实现组合模式,通常会从一个抽象的基类开始。这个基类会被不同的子类扩展。基类需要知道增加或者移除“叶子”(也就是组合的条目)的方法。基类同时也需要知道这个组合或者它的子元素需要做的功能。

为了展示组合模式的一种实现方式,我们举个Department-Employee的例子。这里有两种工作单元的类型:雇员和团队,团队由雇员组成。然后再分配工作给他们完成。

abstract class WorkUnit {
	protected $tasks = array();
	protected $name = NULL;

	function __construct($name) {
		$this->name = $name;
	}

	function getName() {
		return $this->name;
	}

	abstract function add(Employee $e);
	abstract function remove(Employee $e);
	abstract function assignTask($task);
	abstract function completeTask($task);
}

class Team extends WorkUnit {
	private $_employees = array();

	function add(Employee $e) {
		$this->_employees[] = $e;
		echo '<p>'.$e->getName().'加入团队'.$this->getName().'</p><br>';
	}

	function remove(Employee $e) {
		$index = array_search($e, $this->_employees);
		unset($this->_employees[$index]);
		echo '<p>'.$e->getName().'离开团队'.$this->getName().'</p><br>';
	}

	function assignTask($task) {
		$this->tasks[] = $task;
		echo '<p>一个新任务:'.$task.'已分配给团队'.$this->getName().'</p><br>';
	}

	function completeTask($task) {
		$index = array_search($task, $this->tasks);
		unset($this->tasks[$index]);
		echo '<p>任务:'.$task.'已被团队'.$this->getName().'完成</p><br>';
	}
}

class Employee extends WorkUnit {
	function add(Employee $e) {
		return false;
	}

	function remove(Employee $e) {
		return false;
	}

	function assignTask($task) {
		$this->tasks[] = $task;
		echo '<p>一个新任务:'.$task.'已分配给队员'.$this->getName().'</p><br>';
	}

	function completeTask($task) {
		$index = array_search($task, $this->tasks);
		unset($this->tasks[$index]);
		echo '<p>任务:'.$task.'已被队员'.$this->getName().'完成</p><br>';
	}
}

将其保存为:workunit.php

创建测试程序:

require('workunit.php');

$alpha = new Team('Alpha');

$tom = new Employee('Tom');
$john = new Employee('John');

$alpha->add($tom);
$alpha->add($john);

$alpha->assignTask("任务1");
$alpha->assignTask("任务2");
$tom->assignTask("任务1");
$john->assignTask("任务2");


$tom->completeTask("任务1");
$alpha->completeTask("任务1");

$alpha->remove($john);

运行结果:



总结一下:在组合模式中,允许一个类像另一个类那样使用,即便一个类可能由另一种类类型组合而成。

【RT-DETR实战】159、改进九:知识蒸馏从YOLOv8教师模型学习 摘要: 本文探讨了知识蒸馏在RT-DETR目标检测模型中的应用挑战与实践经验。作者以YOLOv8作为教师模型,针对特征对齐、损失函数设计和训练策略等核心问题,提出了适配器模块、动态权重调整和多阶段训练等优化方案。文章重点分析了教师模型选择、特征图匹配、损失函数组合等关键环节的实战技巧,并总结了蒸馏模型部署时的注意事项。通过实验验证,作者指出知识蒸馏应关注模型"思维方式"的迁移而非简单特征复制,并强调合理评估指标和教师模型选择的重要性。最后,作者分享了技术迭代中的边际效应认知,为工业场景下的模型优化提供了实用 阅读详情

相关推荐

Vivado2019.1 ZYNQ7020无Uart SDK调试打印调试信息xil_printf

Vivado2019.1 ZYNQ7020无Uart SDK调试打印调试信息xil_printf

泛红尘的博客 2996

设计模式php实例:组合模式

组合模式有时候又叫做部分-整体模式,它把程序内部简单元素和复杂元素提供给客户端统一的接口,使客户端和程序的内部结构结构,内部可以随意更改扩展。 从类图上看组合模式形成一种树形结构,由枝干和叶子继承Compont显然不符合里氏代换原则。 组合模式类图: php代码实例(来自http://www.linuxso.com/architecture/32350.html):

wzllai的专栏 3635

手把手教你搞定CAC会议投稿:从LaTeX模板到PDF eXpress避坑全流程

本文详细解析CAC会议投稿全流程,重点介绍LaTeX模板调整、Turnitin查重技巧及PDF eXpress校验避坑指南。通过实战案例和代码示例,帮助研究者高效完成IEEE格式论文投稿,避免常见技术性失误,提升投稿成功率。

weixin_29969209的博客 397

PHP 设计模式(十三):组合模式

什么是组合模式 应用场景 PHP 代码实现

GitCode:https://gitcode.com/Eleven-26;GitHub:https://github.com/Eleven-26 256

Qwen2.5-Omni实战:5分钟搞定多模态AI模型本地部署(含Thinker-Talker架构解析)

本文详细介绍了Qwen2.5-Omni多模态AI模型的本地部署流程,包括硬件配置、环境准备和实战应用开发。特别解析了其创新的Thinker-Talker架构,该架构通过TMRoPE位置编码实现跨模态同步处理,大幅提升多模态任务效率。5分钟即可完成部署,适合开发者快速实现文本、图像和音频的联合处理。

weixin_29085865的博客 171

USB3.0/3.1信号完整性分析仿真

• 1.了解USB3.0通路的互连关系,解读原理图接口电路和PCB的互连电路。对USB布线的通路及阻抗进行检查和分析。 • 2.使用USB3.0实例文件提取互连线的S参数,选择SSRX+,SSRX-,SSTX+,SSTX-,D+,D-组的互连线,使用PowerSI,Clarity,3DFEM等工具提起关键网络的S参数。提取S参数以后需要分析S参数的互连特征,对S参数的结果开展评价。 • 3.使用SYSTEM SI USB3 Compliance工程向导模型,建立USB仿真实例框架,在框架BOLCK中带入S参

小猪配齐电子设计 1万+

php面向对象设计模式: 组合模式

组合模式 将若干局部对象根据标准组合成一个抽象的庞大的对象 通过 聚合 来管理很多 相似 的对象 组合模式类的设计 划分主对象和局部对象两种角色 主对象与局部对象通过继承对象共享一个接口 因为共享一个接口,组合对象也可以是当做"局部对象"使用 主对象操作的是局部对象。局部对象不可操作组合对象 主对象是局部对象的继承类 场景举例 因为是树形结构,可以很好生成xml 通过组合模式,可以丰富商...

xq123joes的博客 254

Python实战日志_P4_图书馆Web API服务

目标:使用Flask将图书馆系统升级为RESTful API服务,掌握Web开发基础难度:⭐⭐⭐⭐☆预计学习时间:75分钟前置要求:已完成第3篇《个人图书馆管理系统》

qq_39436086的博客 83

PHP设计模式系列(十四):组合模式

组合模式组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 “组合对象” 的含义。模式结构 Component :组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component子部件。 Leaf:叶子对象。叶子结点

qq_32300363的博客 615

5实践报告撰写

一 项目流程 明确标准 确定分析目标 寻找分析数据 清洗数据 描述性分析 诊断性分析 提出建议 撰写报告 二 确定分析目标 什么是你感兴趣的? 什么是你熟悉的? 什么是你擅长的? 1 电商零售行业 商品销量分析 价格分析 评价分析 ...... 2 自媒体行业 广告投放力度分析 广告投放回报分析 不同类型的产品分析 ...... 3 金融行业 股票价格分析 信贷业务违约分析 客户画像分析 ...... ...

waywardG的博客 2832

HFSS实战项目——基片集成波导(SIW)带通滤波器

设计了一款直接耦合的SIW带通滤波器, 采用直接耦合的形式, 工作频率覆盖19~21 GHz, 通带内插入损耗小于1.5 dB, 回波损耗小于-20 dB, 带外抑制特性良好.

2401_87464239的博客 4896

设计模式:组合模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

组合模式,它是一种用于处理树形结构、表示“部分-整体”层次结构的设计模式。它允许你将对象组合成树形结构,以表示部分和整体的关系。这种模式的主要目的是简化客户端代码,并使客户端以一致的方式处理单个对象和组合对象。

web 916

TC3XX - MCAL知识点(三):MCU EB-tresos配置说明及代码浅析

AURIX 2G Tc3xx的配置相较AURIX 1G Tc2xx来讲简化了许多,但是依赖于数据手册的理解来讲整个MCU功能做了较大增强,此处先简单的介绍一下,本文前期先补充介绍一下英飞凌手册的阅读规则,因为后面的文章会基于此文的一些缩写进行截图寄存器之类的。MCU在AUTOSAR架构里面的图示如下MCU驱动程序负责配置SCU、GTM、CCU6、GPT12和STM外设。驱动程序提供由AUTOSAR指定的运行时服务。

梦想技术家 2873

[转] Php设计模式 - 迭代器模式、策略模式、组合模式

[转] Php设计模式 - 迭代器模式、策略模式、组合模式 <?php /* 迭代器模式:属于行为型模式 使用场景:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。 也就是可以通过遍历数组的方式访问对象成员。 遍历有两种:f...

dashu1993的博客 121

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

PHP设计模式

http://blog.youkuaiyun.com/jungsagacity/article/details/7618587      这篇文章关于单例模式写的挺好,但我有几点疑问,现表达出来,以后长进 昨天去乐居面试,问了我关于设计模式的问题,我不会,减分。ok 这篇文章中写道要声明对象的变量为静态变量,为什么要是静态变量? 1 其实到现在为止,一直不明白这静态变量到底有什么用,用在什么地方

zhuxineli的专栏 799

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

PHP中的设计模式及其实际应用浅析

设计模式在各种语言中都有很重要的应用,每种设计模式都有其特有的优点以及使用场景。接下来,将从单例模式、工厂模式、组合模式以及策略模式四个模式,介绍设计模式及其实际项目中的简单应用。 一、单例模式 单例模式的作用是让这个类只能产生一个实例,适用于创建全局变量 控制一个类只能生成一个实例的方法就是设定静态方法 下面的单例模式示例,创建了web的配置类Config,使得整个web应用程序可以使用

fareise的博客 6104

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

如何用DesignPatternsPHP打造高效PHP应用:初学者必学的7大设计模式实战指南

DesignPatternsPHP是一个专注于PHP 8.x设计模式实现的开源项目,提供了丰富的代码示例帮助开发者理解和应用各种设计模式。本文将带你快速掌握最实用的设计模式,让你的PHP代码更加优雅、可维护和可扩展。 ## 为什么设计模式对PHP开发至关重要? 在PHP开发中,设计模式就像是经过验证的"代码模板",能够解决常见的架构问题。无论是构建大型企业应用还是开发小型API,合理运用设计模

gitblog_00575的博客 1040

Laravel Console Menu与php-school/cli-menu的完美结合:设计模式分析

Laravel Console Menu是一个优雅的PHP命令行菜单工具,它巧妙地将php-school/cli-menu的强大功能与Laravel框架完美融合。这个工具为Laravel开发者提供了创建美观、交互式命令行界面的简单方法,极大地提升了命令行应用的用户体验。在前100个字内,我们将深入探讨这个Laravel命令行菜单扩展的设计模式和实现原理。 ## 📊 装饰器模式:优雅的包装器设计

gitblog_00113的博客 491

PHP组合模式的功能,PHP设计模式之 组合模式

这篇文章介绍的内容是关于PHP设计模式之 组合模式 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下组合器(Composite)模式,属于设计模式中的结构型模式之一,主要用途就是把多个对象组合成一个树状的结构来表示“整体—部分”的关系。举例说明:我们用树状图来表示 江苏省->南京市->秦淮区和建邺区。其中江苏省为一级,南京市属于江苏省作为二级,而建邺区和秦淮区并列属于南京...

weixin_42107165的博客 137

DesignPatternsPHP:文件处理模式实践终极指南

GitHub 加速计划 / de / DesignPatternsPHP 是一个专注于 PHP 8.x 设计模式实现的开源项目,提供了丰富的文件处理模式实践案例。本文将带您快速掌握这些实用设计模式,提升 PHP 文件处理能力。 ## 为什么选择 DesignPatternsPHP? 在 PHP 开发中,文件处理是常见需求。无论是配置文件解析、数据导入导出还是日志管理,采用合适的设计模式能让代码

gitblog_00472的博客 323

php 对象组合,PHP设计模式(七)组合模式Composite实例详解【结构型】

本文实例讲述了PHP设计模式:组合模式Composite。分享给大家供大家参考,具体如下:1. 概述在数据结构里面,树结构是很重要,我们可以把树的结构应用到设计模式里面。例子1:就是多级树形菜单。例子2:文件和文件夹目录2.问题我们可以使用简单的对象组合成复杂的对象,而这个复杂对象有可以组合成更大的对象。我们可以把简单这些对象定义成类,然后定义一些容器类来存储这些简单对象。客户端代码必须区别对象简...

weixin_42557656的博客 260

PHP组合模式的功能,PHP设计模式之组合模式

这篇文章介绍的内容是关于PHP设计模式之 组合模式 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下组合器(Composite)模式,属于设计模式中的结构型模式之一,主要用途就是把多个对象组合成一个树状的结构来表示“整体—部分”的关系。举例说明:我们用树状图来表示 江苏省->南京市->秦淮区和建邺区。其中江苏省为一级,南京市属于江苏省作为二级,而建邺区和秦淮区并列属于南京...

weixin_32068473的博客 135

php 星际争霸 面向对象,php设计模式之组合模式实例详解【星际争霸游戏案例】...

本文实例讲述了php设计模式之组合模式。分享给大家供大家参考,具体如下:星际里面我们可以下载别人制作的地图,或者自己做地图玩。我们在选择玩哪张地图的时候,可以看到游戏列出当前地图包里面的地图或地图包的名字。虽然地图和地图包是通过文件和文件夹区分的,但是我们开发的时候,总希望能使用对象来进行抽象。那么对于地图和地图包这两个相关的对象,我们能不能简化他们之间的区别呢?待解决的问题:尽量是调用这两种对象...

weixin_42300099的博客 137

设计模式之组合模式(PHP实现)

github地址:https://github.com/ZQCard/design_pattern /** 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 这种模式创建了一个包含自己对象组的类...

diaoliu7156的博客 138

php组合模式

首先,组合模式属于结构型模式,那么什么叫组合模式呢?用组合模式有什么要求呢?使用场景是什么呢? 定义:将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 模式中主要包含哪些角色呢?1.Component 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component子部件。2.Leaf 在组合中表示叶子结点对象,叶子结点没有子结点。3.Composite 定义有枝节点行为,用来存储子部件,在Compo

Black Dragon 的个人博客 2446

PHP设计模式之组合模式

PHP设计模式之组合模式 Composite 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以 及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 使用过 laravel-admin 这个快速后台的同学,应该都使用过它的表单类 Form 创建表单的时候,只需要 new Form,然后添加对应的输出的表单 元素就可以了,很快捷,很方便,其实它就是使用了 组合模式 根据以上

LiYi 248
上一篇: PHP:设计模式之工厂模式
下一篇: PHP:设计模式之策略模式
mvpzx
博客等级 码龄10年 17粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值