返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >详述PHP适配器模式(附代码示例)
  • 567
分享到

详述PHP适配器模式(附代码示例)

适配器php后端 2023-05-14 20:05:24 567人浏览 安东尼
摘要

本篇文章给大家带来了关于PHP的相关知识,其中主要跟大家聊一聊php适配器模式,还有代码示例,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。PHP 适配器模式讲解和代码示例适配器是一种结构型设计模式, 它能使不兼容的对象能够相互合作。适

本篇文章给大家带来了关于PHP的相关知识,其中主要跟大家聊一聊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适配器模式(附代码示例)的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 详述PHP适配器模式(附代码示例)

本文链接: https://lsjlt.com/news/205090.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 详述PHP适配器模式(附代码示例)
    本篇文章给大家带来了关于php的相关知识,其中主要跟大家聊一聊PHP适配器模式,还有代码示例,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。PHP 适配器模式讲解和代码示例适配器是一种结构型设计模式, 它能使不兼容的对象能够相互合作。适...
    99+
    2023-05-14
    适配器 php 后端
  • SpringMVC适配器模式代码示例
    此处采用了适配器模式, 由于Controller的类型不同,有多重实现方式,那么调用方式就不是确定的,如果需要直接调用Controller方法,需要在代码中写成如下形式:if(mappedHandler.getHandler() insta...
    99+
    2023-05-30
    springmvc 适配器模式
  • Android Spinner与适配器模式详解及实例代码
    最近做项目对Android Spinner 使用,这里简单写个小例子,来测试如何使用。 Spinner 是一个下拉列表,往安卓界面中拖拽一个Spinner控件,在属性中设置A...
    99+
    2022-06-06
    spinner 适配器模式 Android
  • Java设计模式之适配器模式的示例详解
    目录定义分类案例需求方案一:类适配器方案二:对象适配器方案三:接口适配器对比分析方案一:类适配器方案二:对象适配器方案三:接口适配器总结 定义 适配器模式,即将某个类的接口转换成客户...
    99+
    2024-04-02
  • Java适配器模式示例分析
    本篇内容主要讲解“Java适配器模式示例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java适配器模式示例分析”吧!定义适配器模式,即将某个类的接口转换成客户端期望的另一个接口的表示,主要...
    99+
    2023-06-29
  • JavaScript设计模式之原型模式和适配器模式示例详解
    目录原型模式原型模式介绍代码实现适配器模式适配器模式介绍代码实现小结原型模式 原型模式介绍 原型模式是指原型实例指向创建对象的种类,并通过拷贝这些原型创建新的对象,是一种用来创建对象...
    99+
    2024-04-02
  • 一文详细PHP模板引擎的原理(附代码示例)
    开发一个web项目,通常分为两部分,一部分是GUI,即界面、美工,使用HTML,CSS,JS编写,另一部分则是业务逻辑,即程序、功能,使用PHP编写。而模板引擎则是联系这两部分的“桥梁”,可理解成一个PHP类,里面定义了许多方法,实现了将P...
    99+
    2022-08-08
    模板引擎 php
  • java适配器模式的示例分析
    这篇文章主要为大家展示了“java适配器模式的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java适配器模式的示例分析”这篇文章吧。定义:将一个类的接口转换成客户希望的另外一个接口。适...
    99+
    2023-05-30
    java
  • Java中适配器模式的示例分析
    小编给大家分享一下Java中适配器模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java程序设计模式系列之适配器模式理解适配器设计模式需要从生活中的...
    99+
    2023-06-03
  • java设计模式中适配器模式的示例分析
    这篇文章给大家分享的是有关java设计模式中适配器模式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、结构型模式结构型模式有什么好处?从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的...
    99+
    2023-06-15
  • Java之dao模式详解及代码示例
    什么是dao模式?DAO(Data Access Object)顾名思义是一个为数据库或其他持久化机制提供了抽象接口的对象,在不暴露底层持久化方案实现细节的前提下提供了各种数据访问操作。在实际的开发中,应该将所有对数据源的访问操作进行抽象化...
    99+
    2023-05-30
    java dao设计模式 ava
  • JavaScript设计模式适配器模式实例
    前言: 适配器设计模式可以用生活中常用的笔记本电脑来做例子,笔记本使用电压在20v左右,但是我们家用电压在220v左右,所以我们希望用家用电适配对应的笔记本电压,这个时候就需要使用电...
    99+
    2024-04-02
  • Java设计模式--适配器模式详解
    目录定义结构示例扩展总结定义 适配器模式用于解决接口间的兼容问题。 当我们需要使用某个类提供的接口,但是这个接口与现在的系统需求不符,由于该接口是由第三方提供的,或者是已经在生产上跑...
    99+
    2024-04-02
  • 一文详解PHP用流方式实现下载文件(附代码示例)
    本篇文章给大家带来了关于PHP的相关知识,其中主要介绍了在PHP中怎么使用流方式来实现下载文件的,下面一起来看一下,希望对大家有帮助。PHP 中使用流方式下载文件在 PHP 中,可以使用 fopen () 函数打开一个远程文件,并使用流来下...
    99+
    2023-05-14
    流方式 php
  • Rust模式匹配示例详解
    目录函数斐波那契数列函数小结函数 今天学习的内容是 Rust 中的函数。 函数,和 if 条件控制,while、loop、for 循环控制,在底层都是使用跳转实现的,所以函数也属于流...
    99+
    2022-11-13
    Rust 模式匹配 Rust 模式
  • Java 设计模式之适配器模式详解
    目录定义结构图使用场景代码实现Java代码实现Python代码实现定义 适配器将一个类的接口,转换成客户期望另一个接口。适配器让原本不兼容的类可以合作无间 结构图 如图所示,两脚插...
    99+
    2024-04-02
  • 详解PHP用xlswriter优化Excel导出性能(附代码示例)
    本篇文章给大家带来了关于php的相关知识,其中主要跟大家聊一聊xlswriter扩展是什么?怎么使用xlswriter扩展优化Excel导出性能,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。关于xlswriterxlswriter 是...
    99+
    2023-05-14
    php Excel xlswriter
  • PHP适配器模式怎么应用
    今天小编给大家分享一下PHP适配器模式怎么应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。PHP 适配器模式讲解和代码示例...
    99+
    2023-07-05
  • java 设计模式之适配器模式的详解
    java 设计模式之适配器模式的详解前言:      适配器模式(Adapter Pattern)又叫做变压器模式,也叫做包装模式。包装模式还包括装饰模式。  ...
    99+
    2023-05-31
    java 适配器 ava
  • PHP设计模式的策略,适配器和观察者模式详解
    策略模式 特点 定义一系列算法封装起来, 让他们可以相互替代,策略模式提供了管理相关算法族的办法, 提供了可以体会继承关系的棒法, 避免使用多重条件转移语句 实现 <php a...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作