php怎么做适配,PHP设计模式(十)适配器模式的类适配器的实现

本文解析了适配器模式,以手机充电器为例,阐述如何将不同接口的组件(如200V充电器)适配到期望的接口(手机充电需求)。讲解了模式结构、优点和代码实现,展示了如何通过组合和转换降低类间的耦合。

一、什么是适配器模式

适配器模式(Adapter)将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。

理解:

生活中的例子。

手机,现代人的必备品,手机都会的 充电器、数据线 两大必备物品。

这两件东西与适配器模式息息相关,充电器就起到了对200V电流适配的作用。

不使用充电器对手机充电,那么手机一定会被充“爆炸”。

充电器把200V电流转换为手机所需要的V数。转后之后就可以对手机进行充电了。

二、适配器模式结构

目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。

适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。

适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。

三、适配器模式分为:类适配器和对象适配器

四、适配器模式优缺点

优点:

1)一个适配器可以把多种不同的源适配到同一个目标。

换言之,同一个适配器可以把源类和它的子类都适配到目标接口。

因为对象适配器采用的是对象组合的关系,只要对象类型正确,是不是子类都无所谓。

2)符合设计原则:多用合成/聚合、少用继承,从而减少类之间的耦合

缺点:

1)要重定义Adaptee的行为比较困难,这种情况下,需要定义Adaptee的子类来实现重定义,然后让适配器组合子类。

虽然重定义Adaptee的行为比较困难,但是想要增加一些新的行为则方便的很,而且新增加的行为可同时适用于所有的源

2)需要额外的引用来间接得到Adaptee

五、代码实现

class/Adaptee.php<?php

/**

* Adaptee 源角色 需要适配的类

*

* 可以理解为

* 1)墙壁上的插座

* 2)高压线(需要转换220V才能使用家用电线)

*/

class Adaptee

{

// 墙壁上的插座

public function lineBoard(){

echo '单一功能的2孔插座';

}

}

class/Target.php<?php

/**

* Target目标角色 -->需要进行适配的接口

*

* 可以理解为

* 1)单一插座转为多功能插座

* 2)高压线转为200V

* 3)以及需要的其他功能

*/

interface Target

{

// 适配插座功能

public function lineBoard();

// 添加新的功能,适配成功显示通知

public function notify();

}

class/Adapter.php<?php

/**

* Adapter 适配器适配器,适配 Adaptee 和 Target;

*

* 可以理解为

* 1)实现target目标接口定义的所要进行适配已经新增的功能

* 2)这里就已经实现适配了:

* 如:家里墙壁上的插座就是adaptee。

* 一个插座显然是不够用的,此时我们就会去买一个多功能接线板来进行适配(也是扩展)这就是target目标接口

* 。当买回家后,并插上墙壁上的插座后,就已经完成了适配,这是adapter。

* 最后我们就用这个适配后的接线板同时给给手机和电脑等设备充电了。

*/

class Adapter extends Adaptee implements Target

{

// 实现新的通知同能

public function notify()

{

echo 'hi,已完成适配 ';

}

// 对单一的功能的插座进行适配为多功能插座,也就是重写

public function lineBoard()

{

echo '多功能插座';

}

}

class/index.php

* Adapter 适配器适配器,适配 Adaptee 和 Target;

*

* 可以理解为

* 1)实现target目标接口定义的所要进行适配已经新增的功能

* 2)这里就已经实现适配了:

* 如:家里墙壁上的插座就是adaptee。

* 一个插座显然是不够用的,此时我们就会去买一个多功能接线板来进行适配(也是扩展)这就是target目标接口。

* 当买回家后,并插上墙壁上的插座后,就已经完成了适配,这是adapter。

* 最后我们就用这个适配后的接线板同时给给手机和电脑等设备充电了。

*/

class Adapter extends Adaptee implements Target

{

// 实现新的通知同能

public function notify()

{

echo 'hi,已完成适配 ';

}

// 对单一的功能的插座进行适配为多功能插座,也就是重写

public function lineBoard()

{

echo '多功能插座';

}

}

我是夕阳何处寻,期待和优秀的你一起同行!

夕阳何处寻

2020年04月08日

转载:感谢您对自如初博客网站的认可,所有文章均属原创文章,技术类文章转载请注明出处,“自如初博客”;文学类文章请带文本链接地址,否则视为侵权!

很赞哦!(3)

【评估多目标跟踪方法】9个高度敏捷目标在编队中的轨迹和测量研究(Matlab代码实现)内容概要:本文围绕“评估多目标跟踪方法”,重点研究9个高度敏捷目标在编队飞行中的轨迹生成与测量过程,并提供完整的Matlab代码实现。文中详细模拟了目标的动态行为、运动约束及编队结构,通过仿真获取目标的状态信息与观测数据,用于验证和比较不同多目标跟踪算法的性能。研究内容涵盖轨迹建模、噪声处理、传感器测量模拟以及数据可视化等关键技术环节,旨在为雷达、无人机编队、自动驾驶等领域的多目标跟踪系统提供可复现的测试基准。; 适合人群:具备一定Matlab编程基础,从事控制工程、自动化、航空航天、智能交通或人工智能等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于多目标跟踪算法(如卡尔曼滤波、粒子滤波、GM-CPHD等)的性能评估与对比实验;②作为无人机编队、空中交通监控等应用场景下的轨迹仿真与传感器数据分析的教学与研究平台;③支持对高度机动目标在复杂编队下的可观测性与跟踪精度进行深入分析。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注轨迹生成逻辑与测量模型构建部分,可通过修改目标数量、运动参数或噪声水平来拓展实验场景,进一步提升对多目标跟踪系统设计与评估的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值