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

PHP中的中介者模式是什么

2023-06-20 16:06:09 431人浏览 泡泡鱼
摘要

本篇内容介绍了“PHP中的中介者模式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!上回说道,我们在外打工的经常会和一类人有很深的接触,

本篇内容介绍了“PHP中的中介者模式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

上回说道,我们在外打工的经常会和一类人有很深的接触,那就是房产中介。大学毕业后马上就能在喜欢的城市买到房子的X二代不在我们的考虑范围内哈。既然需要长期的租房,那么因为工作或者生活的变动,不可避免的一两年或者三五年就要和房产中介打一次交道。有的时候,我们租房并不一定会知道房主的信息,房主也不用知道我们的信息,全部都由中介来进行处理。在这里,中介就成为了我们沟通的桥梁,这种情况其实就像是房主出国了或者在外地有事儿而将房子完全的托管到了中介手中。类似于这种情况,在代码世界中,就是中介者模式的典型应用。

Gof类图及解释

GoF定义:用一个中介对象来封装一系列的对象交互。 中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互

GoF类图

PHP中的中介者模式是什么

代码实现

abstract class Mediator{    abstract public function Send(String $message, Colleague $colleague);}class ConcreteMediator extends Mediator{    public $colleague1;    public $colleague2;    public function Send(String $message, Colleague $colleague)    {        if ($colleague == $this->colleague1) {            $this->colleague2->Notify($message);        } else {            $this->colleague1->Notify($message);        }    }}

抽象出来的中介者和具体的实现,在这里,我们假定有固定的两个同事类,让他们互相对话,所以进入的同事是1的时候,就去调用2的Notify方法,相当于是让2接收到了1发来的消息

abstract class Colleague{    protected $mediator;    public function __construct(Mediator $mediator)    {        $this->mediator = $mediator;    }}class ConcreteColleague1 extends Colleague{    public function Send(String $message)    {        $this->mediator->Send($message, $this);    }    public function Notify(String $message)    {        echo "同事1得到信息:" . $message, php_EOL;    }}class ConcreteColleague2 extends Colleague{    public function Send(String $message)    {        $this->mediator->Send($message, $this);    }    public function Notify(String $message)    {        echo "同事2得到信息:" . $message;    }}

同事类及具体的实现,这里我们要确认的一点就是,每一个同事类,只认识中介者,并不认识另外的同事类,这就是中介者的特点,双方不用认识。

$m = new ConcreteMediator();$c1 = new ConcreteColleague1($m);$c2 = new ConcreteColleague2($m);$m->colleague1 = $c1;$m->colleague2 = $c2;$c1->Send("吃过饭了吗?");$c2->Send("没有呢,你打算请客?");

客户端的调用就比较很简单啦!

  • 是不是感觉这个模式很适合做一些通讯类的产品?没错,聊天社交、sns、直播之类的都很合适,因为这个模式就是能让用户与用户之间解耦,不需要让一个用户去维护所有有关联的用户对象

  • 因为不需要用户去维护关系,所以也就顺便解决了关系之间的多对多维护的问题,同时,也不需要去修改用户类来进行关系的变更,保持了用户类的良好封装

  • 但是,中介者集中维护可能导致这个类过于复杂和庞大

  • 所以,模式不是万能的,一定要弄清楚业务场景进行取舍地使用

  • 中介者适用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多个类中的行为,而又不想生成太多子类的场合

作为一名企业家,深知项目管理的重要性,而项目经理,在很多场合下就是一名中介者的角色。从组织角度看,一个项目的开始和结束,作为老板的我并不需要关心是由谁来具体编码实现,我要沟通的人只是项目经理。同理,其他辅助部门包括财务、人事、行政等,他们也不关心谁来写代码,而只需要和项目经理交流了解项目的情况以及需要配合的内容。在项目团队中,写代码的人呢?也不需要知道谁来给他发工资或者考勤问题出在哪里,这一切也交给项目经理解决就好了。所以说,项目经理负责制的项目开发,就是中介者模式的典型应用。我们的手机厂之所以发展的如此之快,也多亏了这些项目经理们,晚上请他们吃大餐去咯~~~

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

实例

这回我们不发短信了,实现一个聊天室吧。一个简单的在线聊天室,需求就是让进入聊天室的用户都可以在线聊天,让我们来看看使用中介者模式来如何实现这个聊天室吧!

聊天室类图

PHP中的中介者模式是什么

完整源码Https://github.com/zhangyue0503/designpatterns-php/blob/master/15.mediator/source/mediator-WEBchat.php

<?phpabstract class Mediator{    abstract public function Send($message, $user);}class ChatMediator extends Mediator{    public $users = [];    public function Attach($user)    {        if (!in_array($user, $this->users)) {            $this->users[] = $user;        }    }    public function Detach($user)    {        $position = 0;        foreach ($this->users as $u) {            if ($u == $user) {                unset($this->users[$position]);            }            $position++;        }    }    public function Send($message, $user)    {        foreach ($this->users as $u) {            if ($u == $user) {                continue;            }            $u->Notify($message);        }    }}abstract class User{    public $mediator;    public $name;    public function __construct($mediator, $name)    {        $this->mediator = $mediator;        $this->name = $name;    }}class ChatUser extends User{    public function Send($message)    {        $this->mediator->Send($message . '(' . $this->name . '发送)', $this);    }    public function Notify($message)    {        echo $this->name . '收到消息:' . $message, PHP_EOL;    }}$m = new ChatMediator();$u1 = new ChatUser($m, '用户1');$u2 = new ChatUser($m, '用户2');$u3 = new ChatUser($m, '用户3');$m->Attach($u1);$m->Attach($u3);$m->Attach($u2);$u1->Send('Hello, 大家好呀!'); // 用户2、用户3收到消息$u2->Send('你好呀!'); // 用户1、用户3收到消息$m->Detach($u2); // 用户2退出聊天室$u3->Send('欢迎欢迎!'); // 用户1收到消息

说明

  • 有没有发现,中介者就是这个“聊天室”,由它来进行信息的传递转移

  • 这里由于不固定用户人数,因此是一个数组维护的,当用户发送消息的时候,除了他自己,其他人都收到了这条消息

  • 聊天室可以自由地进出用户,说实话,这个例子真的很像一个已经差不多实现功能了的聊天应用哦

  • 果然中介者模式真的很适合通信方面的应用,但是,如果进入的用户非常多,$users列表就会越来越臃肿了哦,这就是上文中所述的中介者模式的问题所在

“PHP中的中介者模式是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: PHP中的中介者模式是什么

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

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

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

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

下载Word文档
猜你喜欢
  • PHP中的中介者模式是什么
    本篇内容介绍了“PHP中的中介者模式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!上回说道,我们在外打工的经常会和一类人有很深的接触,...
    99+
    2023-06-20
  • JavaScript中介者模式的作用是什么
    这篇文章给大家介绍JavaScript中介者模式的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝大多数浏览器的支持下,js可以在多种平台下...
    99+
    2023-06-14
  • PHP中的观察者模式是什么
    这篇文章主要讲解了“PHP中的观察者模式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中的观察者模式是什么”吧!介绍现在有两派,有的人建议使用设计模式,有的人不建议使用设计模式!...
    99+
    2023-06-20
  • PHP中的建造者模式是什么
    这篇文章主要介绍“PHP中的建造者模式是什么”,在日常操作中,相信很多人在PHP中的建造者模式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP中的建造者模式是什么”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-20
  • 中介者(调停者)模式
    http://www.cnblogs.com/java-my-life/archive/2012/06/20/2554024.htmlinterface Mediator {     &nb...
    99+
    2023-06-03
  • PHP设计模式之中介者模式浅析
    目录中介者模式PHP中的中介者模式中介者模式 中介者模式(Mediator Pattern)是一种常用的设计模式,用于解决各个对象之间的复杂依赖关系,使得各个对象之间可以独立地改变自...
    99+
    2023-05-14
    PHP中介者模式 PHP 设计模式 中介者模式
  • PHP设计模式之中介者模式怎么实现
    这篇“PHP设计模式之中介者模式怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP设计模式之中介者模式怎么实现”文...
    99+
    2023-07-05
  • PHP中的观察者模式是什么意思
    本篇内容主要讲解“PHP中的观察者模式是什么意思”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP中的观察者模式是什么意思”吧!观察者,貌似在很多科幻作品中都会有这个角色的出现。比如我很喜欢的...
    99+
    2023-06-20
  • Java设计模式之中介者模式
    在我们实际业务中,可能存在多个类之间相互调用,形成了一个复杂的网状结构。这时候就需要有一种模式去“捋顺”他们之间的关系,引出一个中间者让类之间不再相互调用,该...
    99+
    2022-11-13
    Java 设计模式 中介者模式
  • java中的建造者模式是什么
    本篇内容主要讲解“java中的建造者模式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中的建造者模式是什么”吧!目录引例一般解法代码:AbstractHouse(房子)Bungal...
    99+
    2023-06-20
  • java中的装饰者模式是什么
    本篇内容介绍了“java中的装饰者模式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录引例一般解法装饰者模式装饰者解法代码:抽象类装...
    99+
    2023-06-20
  • JavaScript设计模式中的桥接和中介者模式
    目录一、桥接设计模式桥接设计模式在工作中的使用二、JavaScript中介者模式生活中的中介者中介者设计模式案例业务中的中介者一、桥接设计模式 桥接设计模式是一种偏向于组合的设计模式...
    99+
    2024-04-02
  • JavaScript中什么是装饰者模式
    本篇文章为大家展示了JavaScript中什么是装饰者模式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝大多数浏览器的支持下,j...
    99+
    2023-06-14
  • javascript中介者模式的代码怎么写
    这篇文章主要介绍“javascript中介者模式的代码怎么写”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“javascript中介者模式的代码怎么写”文章能帮助大家解决问题。中介者对象践行了最少知识...
    99+
    2023-06-27
  • 怎么在JavaScript中使用介者模式
    今天就跟大家聊聊有关怎么在JavaScript中使用介者模式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript的特点1.JavaScript主要用来向HTML页面添加...
    99+
    2023-06-14
  • JavaScript设计模式之中介者模式详解
    目录中介者模式现实中的中介者中介者模式的例子泡泡堂游戏为游戏增加队伍玩家增多带来的困扰用中介者模式改造泡泡堂游戏小结中介者模式 在我们生活的世界中,每个人每个物体之间都会产生一些错综...
    99+
    2022-11-13
    JavaScript 设计模式 JavaScript 中介者模式
  • JavaScript设计模式中的桥接和中介者模式怎么实现
    这篇文章主要介绍“JavaScript设计模式中的桥接和中介者模式怎么实现”,在日常操作中,相信很多人在JavaScript设计模式中的桥接和中介者模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”J...
    99+
    2023-07-02
  • java中装饰者模式的原理是什么
    java中装饰者模式的原理是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序...
    99+
    2023-06-14
  • Java设计模式之中介者模式的实现方式
    目录介绍实现总结介绍 Java中介者模式(Mediator Pattern)是一种行为设计模式,它可以降低多个对象之间的耦合性,通过一个中介者对象来协调这些对象的交互. 在中介者模式...
    99+
    2023-05-18
    Java设计模式中介者模式 Java中介者模式
  • Java编程中的观察者模式是什么
    这篇文章主要介绍“Java编程中的观察者模式是什么”,在日常操作中,相信很多人在Java编程中的观察者模式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java编程中的观察者模式是什么”的疑惑有所帮助!...
    99+
    2023-05-30
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作