iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP中的桥接模式是什么
  • 505
分享到

PHP中的桥接模式是什么

2023-06-20 16:06:41 505人浏览 安东尼
摘要

这篇文章主要讲解了“PHP中的桥接模式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php中的桥接模式是什么”吧!桥接模式,在程序世界中,其实就是组合/聚合的代名词。为什么这么说呢?熟

这篇文章主要讲解了“PHP中的桥接模式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php中的桥接模式是什么”吧!

桥接模式,在程序世界中,其实就是组合/聚合的代名词。为什么这么说呢?熟悉面向对象的我们都知道继承的好处,子类可以共享父类的很多属性、功能。但是,继承也会带来一个问题,那就是严重的耦合性。父类的修改多少都会对子类产生影响,甚至一个方法或属性的修改都有可能让所有子类都去修改一遍。这样就违背了开放封装原则。而桥接就是为了解决这个问题,它强调的是用组合/聚合的方式来共享一些能用的方法。相信大家一定想到了php中的trait,如果你在工作中使用过这个特性,那么你就已经用过桥接模式了!

Gof类图及解释

GoF定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。

GoF类图

PHP中的桥接模式是什么

代码实现

interface Implementor{    public function OperationImp();}class ConcreteImplementorA implements Implementor{    public function OperationImp()    {        echo '具体实现A', PHP_EOL;    }}class ConcreteImplementorB implements Implementor{    public function OperationImp()    {        echo '具体实现B', PHP_EOL;    }}

我们先来定义实现接口以及它们具体的实现,也就是真正要执行的功能。就像是适配器模式中的Adaptee。

abstract class Abstraction{    protected $imp;    public function SetImplementor(Implementor $imp)    {        $this->imp = $imp;    }    abstract public function Operation();}class RefinedAbstraction extends Abstraction{    public function Operation()    {        $this->imp->OperationImp();    }}

定义抽象类的接口,并维护一个对实现的引用。具体的抽象类的实现方法中,我们直接调用实现接口的真实操作方法。类似于适配器中的Adapter。

$impA = new ConcreteImplementorA();$impB = new ConcreteImplementorB();$ra = new RefinedAbstraction();$ra->SetImplementor($impA);$ra->Operation();$ra->SetImplementor($impB);$ra->Operation();

客户端调用,我们的抽象类使用不用的实现类就可以让操作方法变成多态的感觉。

  • 源码解释中,我们会发现,这个模式和适配器模式非常相似。但是,适配器的目的是为了帮助两个不太相关的类,让它们能够协同工作,实现中间转换工作。而桥接则是为了让方法的行为解除继承耦合,方便地添加、修改,动态调用行为,让抽象接口和实现部分可以独立进行改变

  • 让抽象接口和实现部分可以独立进行改变的意思是,只要维护了实现接口的引用,我们的实现接口的具体实现类可以是完全不同的类,里面有不同的功能,并且可以任意改变。让实现来自己决定它自己是什么。

  • 桥接模式的优点:分享接口及其实现部分、提高可扩充性、实现细节对客户透明

  • 桥接模式最主要解决的问题就是继承的不断增长而带来的紧耦合问题

  • 组合与聚合:聚合是弱关系,A可以包含B,但B不是A的一部分;组合是强关系,A包含B,B也是A的一部分,整体和部分的关系

我们的手机有不同的型号,每个型号又要生产大致相同但不同的配件。比如X1手机壳、贴膜、耳机;X2的手机壳、贴膜、耳机等。受限于成本的问题,我们不会给每一个型号的手机都去生产完全不一样的配套配件。而是去尽量使用外部通用的配件(Implementor),让每一种型号的手机(Abstraction)去进行组合(Bridge),搭配售卖给消费者。这样,才不至于让我们的手机品牌太早的消耗完融资关门大吉。看来,做企业和学设计模式还真是有很多相关之处哦!!

完整代码:https://GitHub.com/zhangyue0503/designpatterns-php/blob/master/18.bridge/source/bridge.php

实例

我们的短信发送也可以用桥接来实现。假设我们有很多的短信模板,然后搭配不同的短信提供商进行短信的发送。这时,我们就可以用桥接模式来形成各种不同的组合。

短信发送类图

PHP中的桥接模式是什么

完整源码:Https://github.com/zhangyue0503/designpatterns-php/blob/master/18.bridge/source/bridge-message.php

<?phpinterface MessageTemplate{    public function GetTemplate();}class LoginMessage implements MessageTemplate{    public function GetTemplate()    {        echo '您的登录验证码是【AAA】,请不要泄露给他人【XXX公司】!', PHP_EOL;    }}class ReGISterMessage implements MessageTemplate{    public function GetTemplate()    {        echo '您的注册验证码是【BBB】,请不要泄露给他人【XXX公司】!', PHP_EOL;    }}class FindPassWordMessage implements MessageTemplate{    public function GetTemplate()    {        echo '您的找回密码验证码是【CCC】,请不要泄露给他人【XXX公司】!', PHP_EOL;    }}abstract class MessageService{    protected $template;    public function SetTemplate($template)    {        $this->template = $template;    }    abstract public function Send();}class AliYunService extends MessageService{    public function Send()    {        echo '阿里云开始发送短信:';        $this->template->GetTemplate();    }}class JiGuangService extends MessageService{    public function Send()    {        echo '极光开始发送短信:';        $this->template->GetTemplate();    }}// 三个短信模板$loginTemplate = new LoginMessage();$registerTemplate = new RegisterMessage();$findPwTemplate = new FindPasswordMessage();// 两个短信服务商$aliYun = new AliYunService();$jg = new JiGuangService();// 随意组合// 极光发注册短信$jg->SetTemplate($registerTemplate);$jg->Send();// 阿里云发登录短信$aliYun->SetTemplate($loginTemplate);$aliYun->Send();// 阿里云发找回密码短信$aliYun->SetTemplate($findPwTemplate);$aliYun->Send();// 极光发登录短信$jg->SetTemplate($loginTemplate);$jg->Send();// ......

说明

  • 这就是一种聚合模式。模板并不是短信发送的一部分,我们不使用模板直接发送也可以,它们没有强关系

  • 短信发送商的发送方法无需改变,只需要传入不同的短信模板就可以实现各种模板的快速发送

  • 在不确定是否一定是is-a的关系的情况下,更推荐用桥接模式这种组合/聚合形式的设计方法,如果确定当前的类关系是is-a,那么就不要犹豫的用继承吧

感谢各位的阅读,以上就是“PHP中的桥接模式是什么”的内容了,经过本文的学习后,相信大家对PHP中的桥接模式是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: PHP中的桥接模式是什么

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

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

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • PHP中的桥接模式是什么
    这篇文章主要讲解了“PHP中的桥接模式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中的桥接模式是什么”吧!桥接模式,在程序世界中,其实就是组合/聚合的代名词。为什么这么说呢?熟...
    99+
    2023-06-20
  • 什么是php桥接模式
    本篇内容主要讲解“什么是php桥接模式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是php桥接模式”吧!说明将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果。...
    99+
    2023-06-20
  • php桥接模式的作用是什么
    这篇文章主要讲解了“php桥接模式的作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php桥接模式的作用是什么”吧!作用说明桥接模式分离抽象接口及其实现部分,实现解耦,比继承更好的解...
    99+
    2023-06-20
  • java中的桥接模式是什么
    本篇内容主要讲解“java中的桥接模式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中的桥接模式是什么”吧!目录引例桥接模式实战示例代码:总结引例需求:对不同手机类型的不同品牌(比...
    99+
    2023-06-20
  • php 桥接模式
    一,桥接模式,是结构设计模式的一种,其将抽象部分和实现部分分离开来,使两部分可以独立的进行修改,提高系统的灵活性。在桥接模式中,需要定义一个抽象类和一个实现类,通过将实现类注入到抽象类中,来实现两者的解耦合。 二,简单例子 // 实现类接口...
    99+
    2023-09-01
    桥接模式 php 设计模式
  • docker桥接模式的作用是什么
    Docker桥接模式(Bridge Mode)是Docker的一种网络模式,它允许容器通过一个虚拟的网络桥接器连接到宿主机的网络接口...
    99+
    2023-10-22
    docker
  • C++设计模式中的桥模式是什么
    这篇文章主要介绍了C++设计模式中的桥模式是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。单一职责模式:在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是...
    99+
    2023-06-29
  • 设计模式系列之什么是桥接模式
    这篇文章主要介绍“设计模式系列之什么是桥接模式”,在日常操作中,相信很多人在设计模式系列之什么是桥接模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”设计模式系列之什么是桥接...
    99+
    2024-04-02
  • PHP桥接模式的优点与实现方法是什么
    这篇文章主要介绍“PHP桥接模式的优点与实现方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP桥接模式的优点与实现方法是什么”文章能帮助大家解决问题。桥接模式Bridge Pattern...
    99+
    2023-07-05
  • Java设计模式中的桥接模式
    目录模式介绍UML类图桥接模式案例桥接模式的注意事项和细节常见的应用场景模式介绍 桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。是一种...
    99+
    2024-04-02
  • 详解PHP设计模式之桥接模式
    目录简介适用场景优点缺点扩展案例代码抽象代码简介 桥接模式又叫桥梁模式,属于结构型模式。目的是将抽象与实现分离,使它们都可以独立的变化,解耦。继承有很多好处,但是会增加耦合,而桥接模...
    99+
    2022-12-20
    PHP桥接模式 PHP设计模式
  • Javascript中怎么实现桥接模式
    Javascript中怎么实现桥接模式,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。基本理论桥接模式定义:将抽象部分与它的实现部分分离,使它们...
    99+
    2024-04-02
  • JavaScript设计模式中的桥接和中介者模式
    目录一、桥接设计模式桥接设计模式在工作中的使用二、JavaScript中介者模式生活中的中介者中介者设计模式案例业务中的中介者一、桥接设计模式 桥接设计模式是一种偏向于组合的设计模式...
    99+
    2024-04-02
  • Python设计模式中的结构型桥接模式
    目录一、桥接模式二、应用场景三、代码示例一、桥接模式 桥接模式,希望能够将一个事物的两个维度分离(解耦),使其都可以独立地变化,并通过桥梁连接起来。 (类)抽象部分(Abstract...
    99+
    2024-04-02
  • PHP结构型设计模式之桥接模式怎么实现
    本篇内容介绍了“PHP结构型设计模式之桥接模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!桥接模式(Bridge Pattern)...
    99+
    2023-07-05
  • Java设计模式的桥接模式怎么实现
    这篇文章主要讲解了“Java设计模式的桥接模式怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java设计模式的桥接模式怎么实现”吧!什么是桥接模式桥接(Bridge)模式的定义如下:...
    99+
    2023-06-30
  • Golang设计模式中的桥接模式详细讲解
    目录桥接模式概念示例桥接模式 桥接是一种结构型设计模式, 可将业务逻辑或一个大类拆分为不同的层次结构, 从而能独立地进行开发。 层次结构中的第一层 (通常称为抽象部分) 将包含对第二...
    99+
    2023-01-11
    Go桥接模式 Go设计模式
  • Unity游戏开发中的桥接模式
    目录一、使用中介者模式的原因二、桥接模式的定义三、桥接模式的使用说明四、桥接模式的实现范例五、桥接模式的总结一、使用中介者模式的原因 比如,在实现较为复杂的角色和装备关系时,将两种...
    99+
    2023-05-19
    Unity桥接模式 Unity设计模式
  • Java怎么实现桥接模式
    本文小编为大家详细介绍“Java怎么实现桥接模式”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java怎么实现桥接模式”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。桥接模式(Bridge Pattern)是用于...
    99+
    2023-06-27
  • Java桥接模式怎么使用
    这篇文章主要介绍“Java桥接模式怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java桥接模式怎么使用”文章能帮助大家解决问题。其实在现实生活中,有很多类可以有两个或多个维度的变化,如图形...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作