我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP适配器模式怎么应用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP适配器模式怎么应用

今天小编给大家分享一下PHP适配器模式怎么应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

PHP 适配器模式讲解和代码示例

适配器是一种结构型设计模式, 它能使不兼容的对象能够相互合作。

适配器可担任两个对象间的封装器, 它会接收对于一个对象的调用, 并将其转换为另一个对象可识别的格式和接口。

复杂度:******

流行度:******

使用示例: 适配器模式在 PHP 代码中很常见。 基于一些遗留代码的系统常常会使用该模式。 在这种情况下, 适配器让遗留代码与现代的类得以相互合作。

识别方法: 适配器可以通过以不同抽象或接口类型实例为参数的构造函数来识别。 当适配器的任何方法被调用时, 它会将参数转换为合适的格式, 然后将调用定向到其封装对象中的一个或多个方法。

  • 真实世界示例

适配器允许你使用第三方或遗留系统的类, 即使它们与你的代码不兼容。 例如, 你可以创建一系列特殊的封装器, 来让应用所发出的调用与第三方类所要求的接口与格式适配, 而无需重写应用的通知接口以使其支持每一个第三方服务 (如钉钉、 微信、 短信或其他任何服务)。

index.php: 真实世界示例

<?php

namespace RefactoringGuru\Adapter\RealWorld;


interface Notification
{
   public function send(string $title, string $message);
}


class EmailNotification implements Notification
{
   private $adminEmail;

   public function __construct(string $adminEmail)
   {
       $this->adminEmail = $adminEmail;
   }

   public function send(string $title, string $message): void
   {
       mail($this->adminEmail, $title, $message);
       echo "Sent email with title '$title' to '{$this->adminEmail}' that says '$message'.";
   }
}


class SlackApi
{
   private $login;
   private $apiKey;

   public function __construct(string $login, string $apiKey)
   {
       $this->login = $login;
       $this->apiKey = $apiKey;
   }

   public function logIn(): void
   {
       // Send authentication request to Slack web service.
       echo "Logged in to a slack account '{$this->login}'.\n";
   }

   public function sendMessage(string $chatId, string $message): void
   {
       // Send message post request to Slack web service.
       echo "Posted following message into the '$chatId' chat: '$message'.\n";
   }
}


class SlackNotification implements Notification
{
   private $slack;
   private $chatId;

   public function __construct(SlackApi $slack, string $chatId)
   {
       $this->slack = $slack;
       $this->chatId = $chatId;
   }

   
   public function send(string $title, string $message): void
   {
       $slackMessage = "#" . $title . "# " . strip_tags($message);
       $this->slack->logIn();
       $this->slack->sendMessage($this->chatId, $slackMessage);
   }
}


function clientCode(Notification $notification)
{
   // ...

   echo $notification->send("Website is down!",
       "<strong style='color:red;font-size: 50px;'>Alert!</strong> " .
       "Our website is not responding. Call admins and bring it up!");

   // ...
}

echo "Client code is designed correctly and works with email notifications:\n";
$notification = new EmailNotification("developers@example.com");
clientCode($notification);
echo "\n\n";


echo "The same client code can work with other classes via adapter:\n";
$slackApi = new SlackApi("example.com", "XXXXXXXX");
$notification = new SlackNotification($slackApi, "Example.com Developers");
clientCode($notification);

Output.txt: 执行结果

Client code is designed correctly and works with email notifications:
Sent email with title 'Website is down!' to 'developers@example.com' that says '<strong style='color:red;font-size: 50px;'>Alert!</strong> Our website is not responding. Call admins and bring it up!'.
The same client code can work with other classes via adapter:
Logged in to a slack account 'example.com'.
Posted following message into the 'Example.com Developers' chat: '#Website is down!# Alert! Our website is not responding. Call admins and bring it up!'.
  • 概念示例

本例说明了适配器设计模式的结构并重点回答了下面的问题:

  • 它由哪些类组成?

  • 这些类扮演了哪些角色?

  • 模式中的各个元素会以何种方式相互关联?

了解该模式的结构后, 你可以更容易地理解下面基于真实世界的 PHP 应用案例。

index.php:  概念示例
<?php

namespace RefactoringGuru\Adapter\Conceptual;


class Target
{
   public function request(): string
   {
       return "Target: The default target's behavior.";
   }
}


class Adaptee
{
   public function specificRequest(): string
   {
       return ".eetpadA eht fo roivaheb laicepS";
   }
}


class Adapter extends Target
{
   private $adaptee;

   public function __construct(Adaptee $adaptee)
   {
       $this->adaptee = $adaptee;
   }

   public function request(): string
   {
       return "Adapter: (TRANSLATED) " . strrev($this->adaptee->specificRequest());
   }
}


function clientCode(Target $target)
{
   echo $target->request();
}

echo "Client: I can work just fine with the Target objects:\n";
$target = new Target();
clientCode($target);
echo "\n\n";

$adaptee = new Adaptee();
echo "Client: The Adaptee class has a weird interface. See, I don't understand it:\n";
echo "Adaptee: " . $adaptee->specificRequest();
echo "\n\n";

echo "Client: But I can work with it via the Adapter:\n";
$adapter = new Adapter($adaptee);
clientCode($adapter);
Output.txt:  执行结果
Client: I can work just fine with the Target objects:
Target: The default target's behavior.

Client: The Adaptee class has a weird interface. See, I don't understand it:
Adaptee: .eetpadA eht fo roivaheb laicepS

Client: But I can work with it via the Adapter:
Adapter: (TRANSLATED) Special behavior of the Adaptee.

以上就是“PHP适配器模式怎么应用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP适配器模式怎么应用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP适配器模式怎么应用

今天小编给大家分享一下PHP适配器模式怎么应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。PHP 适配器模式讲解和代码示例
2023-07-05

PHP适配器模式Adapter Pattern怎么使用

本篇内容主要讲解“PHP适配器模式Adapter Pattern怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP适配器模式Adapter Pattern怎么使用”吧!适配器模式Ada
2023-07-05

JavaScript适配器模式的应用详解

这篇文章主要介绍了理解JavaScript中的适配器模式,适配器模式即AdapterPattern,是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,下文更多相关介绍需要的小伙伴可以参考一下
2022-11-13

Android设计模式之适配器模式怎么使用

适配器模式是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。它允许不兼容的类能够一起工作,通过创建一个适配器类,将原始类的接口转换成目标接口。在Android开发中,适配器模式常用于以下场景:1. ListView和R
2023-08-14

java适配器模式怎么实现

适配器模式是一种结构型设计模式,用于将一个类的接口转换为另一个接口,以便兼容不同的类或系统。在Java中,适配器模式可以通过以下步骤实现:定义目标接口:这是适配器类要实现的接口,用于定义客户端所需的方法。public interface T
2023-10-23

Java适配器模式怎么掌握

今天小编给大家分享一下Java适配器模式怎么掌握的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、什么是适配器模式?其实适配
2023-06-29

Android 适配器模式应用及设计原理

适配器模式是一种重要的设计模式,在 Android 中得到了广泛的应用。适配器类似于现实世界里面的插头,通过适配器,我们可以将分属于不同类的两种不同类型的数据整合起来,而不必去根据某一需要增加或者修改类里面的方法。 适配器又分为单向适配器和
2022-06-06

Java设计模式的适配器模式怎么实现

这篇文章主要介绍“Java设计模式的适配器模式怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java设计模式的适配器模式怎么实现”文章能帮助大家解决问题。什么是适配器模式适配器模式(Adap
2023-06-30

Java中怎么实现适配器模式

本篇文章为大家展示了Java中怎么实现适配器模式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、类适配模式在地球时代,所有坐骑都是只能跑,不能飞的,而现在很多坐骑在地球都可以飞了。假设,地球时代的
2023-06-17

web设计模式的适配器模式有什么用

本文小编为大家详细介绍“web设计模式的适配器模式有什么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“web设计模式的适配器模式有什么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。意图将一个类的接口转换成客
2023-06-19

Java适配器模式的实现及应用场景

适配器模式是Java中一种常用的设计模式,它通过将一个类的接口转换成客户端所期望的另一种接口来实现不同接口之间的兼容性。适配器模式主要应用于系统的接口不兼容、需要扩展接口功能以及需要适应不同环境的场景
2023-05-17

Java设计模式解析之适配器模式怎么实现

本篇内容介绍了“Java设计模式解析之适配器模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、什么是适配器模式:适配器模式主要用
2023-06-30

JavaScript状态模式及适配器模式使用讲解

这篇文章主要介绍了理解JavaScript中的状态模式及适配器模式,适配器模式即AdapterPattern,是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,下文更多相关介绍需要的小伙伴可以参考一下
2022-12-30

.Net结构型设计模式之适配器模式怎么实现

本文小编为大家详细介绍“.Net结构型设计模式之适配器模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“.Net结构型设计模式之适配器模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、动机(
2023-06-30

SpringMVC适配器模式作用范围是什么

这篇文章主要介绍“SpringMVC适配器模式作用范围是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringMVC适配器模式作用范围是什么”文章能帮助大家解决问题。HandlerAdapt
2023-07-06

android深色模式适配怎么实现

要实现Android深色模式适配,可以按照以下步骤进行:1. 在AndroidManifest.xml文件中设置主题样式为DayNight主题。例如:```xml...android:theme="@style/AppTheme">...`
2023-09-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录