软件开发不断随着新想法,方法以及高质量的库和框架而演变。 但是,变化仍然不可避免。 即使是看似完美的系统,最终也会面临修改请求。 作为开发人员,我们必须预料并适应这些变化。适配器模式是用于管理此类修改的关键设计模式。本文通过现实世界的示例探讨了其用途和优势。
钥匙要点:
- 适配器模式对于处理软件的更改,启用不兼容组件并添加新功能至关重要。
- >它保持了不同库版本之间的兼容性,以防止对现有系统的干扰。 >它不是旨在修复系统设计差,而是为了管理第三方库中的变化或引入与初始需求大不相同的新功能。
- 明智的使用是关键;如果适配器不准确复制目标接口的行为,则过度使用会使代码复杂并导致问题。
- >什么是适配器模式?
适配器模式简化了变化或新功能的集成。 从本质上讲,这是连接不兼容组件的接口。想象一下手机访问电子邮件帐户以发送电子邮件。电话和电子邮件应用程序是通过Internet连接的单独组件。>
现在,想象一下您的手机没有互联网访问的区域。您如何发送电子邮件?您需要一个适配器将手机连接到电子邮件应用程序。 这个适配器将:
启用电话和电子邮件应用之间的Internet连接。
- >访问电子邮件应用程序的API发送电子邮件。
- IFTTT可以用作此适配器。 它使用流行的API自动化任务。
>在这里,您将SMS(无需互联网)发送给IFTTT,并使用电子邮件文本发送。 IFTTT,具有必要的Internet连接并发送电子邮件给API访问,请发送电子邮件。 IFTTT充当适配器,桥接不兼容的电话和电子邮件应用程序。
了解适配器模式实现
>让我们以网站的电子邮件订阅界面为例:
<?php interface EmailSubscribe { public function subscribe($email); public function unsubscribe($email); public function sendUpdates(); } ?>
>开发人员和电子邮件服务提供商可以为Feedburner,MailChimp等服务实施此功能。这是一个feedBurner示例:
<?php class FeedburnerEmail implements EmailSubscribe { public function subscribe($email) { } public function unsubscribe($email) { } public function sendUpdates() { // Get Available Subscribers // Get Website Updates // Send Emails } } $feedburner_email = new FeedburnerEmail(); $feedburner_email->sendUpdates(); ?>
现在,假设feedburner更新其库:
<?php class FeedburnerEmailVersion2 { public function subscribe($email) { } public function unsubscribe($email) { } public function getSubscribers() { // Return Subscribers } public function sendEmails($subscribers) { // Get Website Updates // Send Emails echo "emails sent today"; } } $feedburner_email = new FeedburnerEmailVersion2(); $subscribers = $feedburner_email->getSubscribers(); $feedburner_email->sendEmails($subscribers); ?>
新版本与EmailSubscribe
>不兼容。我们需要一个适配器:
<?php class FeedburnerAdapter implements EmailSubscribe { public function subscribe($email) { } public function unsubscribe($email) { } public function sendUpdates() { $feedburner = new FeedburnerEmailVersion2(); $subscribers = $feedburner->getSubscribers(); $feedburner->sendEmails($subscribers); } } $feedburner_email = new FeedburnerAdapter(); $feedburner_email->sendUpdates(); ?>
FeedburnerAdapter
>初始化FeedburnerEmailVersion2
并重建原始功能。 该应用程序仍未意识到库的变化,仅与适配器进行交互。
通常,我们有一个客户,目标和适应器。 适配器位于目标和适应器之间以保持兼容性。 虽然接口并未在PHP中广泛使用,但该原理保持不变 - 桥接不兼容的组件。
谁开发适配器类?
>适配器的创建取决于项目。 对于常见的第三方库,开发人员通常会创建适配器。 在大规模项目中,供应商可能会为其库提供适配器,以在更新后保持兼容性。
适配器模式 - 错误的方式
>>适配器模式并不用于固定设计较差的系统。 即使两者都实现FeedburnerEmail
,也要考虑具有不兼容的实现的场景。 这需要一个适配器来修复客户阶段的不兼容性,突出显示了在接口定义中应解决的设计缺陷。MailchimpEmail
>
EmailSubscribe
> 适配器最佳用于第三方库,或者在添加与原始需求明显不同的新功能时。 例如,将Twitter订阅添加到网站上。 类与现有的
接口不兼容,但可以适应:>
TwitterService
EmailSubscribe
<?php class TwitterService { public function authenticate($username) {} public function deauthenticate($username) {} public function tweet($message,$user) { // Update wall with new tweet } public function getUpdates() { // Return Updates } public function getFollowers() { // Return followers } } class TwitterAdapter implements EmailSubscribe { public function subscribe($username) { } public function unsubscribe($username) { } public function sendUpdates() { $tw_service = new TwitterService(); $updates = $tw_service->getUpdates(); $subscribers = $tw_service->getFollowers(); $tw_service->tweet($updates,$subscribers); } } $twitter_subscribe = new TwitterAdapter(); $twitter_subscribe->sendUpdates(); ?>
接口,允许客户保持不变。TwitterAdapter
>
TwitterService
EmailSubscribe
摘要
适配器模式是一种强大的工具,但是它的有效使用需要仔细考虑。 了解其适当且不当的应用程序对于清洁和可维护的代码至关重要。
(所提供的文本的其余部分,包括常见问题部分,是对适配器模式及其各个方面的详细说明。由于提示提示请求释义,并未指定本节的排除,所以在满足提示的核心要求的同时,省略了它以保持响应的简洁。以上是PHP主|适配器模式的实际方面的详细内容。更多信息请关注PHP中文网其他相关文章!

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

Laravel简化了传入请求中的HTTP动词处理,从而简化了应用程序中的多样化操作管理。 方法()和iSmethod()方法有效地识别和验证请求类型。 此功能对于构建至关重要

Laravel框架的Storage::download方法提供了一个简洁的API,用于安全地处理文件下载,同时管理文件存储的抽象。 以下是一个在示例控制器中使用Storage::download()的例子:


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

WebStorm Mac版
好用的JavaScript开发工具

Atom编辑器mac版下载
最流行的的开源编辑器

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。