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

PHP中的中介者模式是什么

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

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

免责声明:

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

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

PHP中的中介者模式是什么

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

下载Word文档

猜你喜欢

PHP中的中介者模式是什么

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

JavaScript中介者模式的作用是什么

这篇文章给大家介绍JavaScript中介者模式的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝大多数浏览器的支持下,js可以在多种平台下
2023-06-14

PHP中的观察者模式是什么

这篇文章主要讲解了“PHP中的观察者模式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中的观察者模式是什么”吧!介绍现在有两派,有的人建议使用设计模式,有的人不建议使用设计模式!
2023-06-20

PHP中的建造者模式是什么

这篇文章主要介绍“PHP中的建造者模式是什么”,在日常操作中,相信很多人在PHP中的建造者模式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP中的建造者模式是什么”的疑惑有所帮助!接下来,请跟着小编
2023-06-20

PHP设计模式之中介者模式浅析

这篇文章主要介绍了PHP设计模式之中介者模式,中介者模式(MediatorPattern)是一种常用的设计模式,用于解决各个对象之间的复杂依赖关系,使得各个对象之间可以独立地改变自己的行为,而不需要与其他对象发生直接的交互
2023-05-14

PHP中的观察者模式是什么意思

本篇内容主要讲解“PHP中的观察者模式是什么意思”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP中的观察者模式是什么意思”吧!观察者,貌似在很多科幻作品中都会有这个角色的出现。比如我很喜欢的
2023-06-20

中介者(调停者)模式

http://www.cnblogs.com/java-my-life/archive/2012/06/20/2554024.htmlinterface Mediator { /** * 同事对象在自身改变的时候来通知调停者方
2023-06-03

PHP设计模式之中介者模式怎么实现

这篇“PHP设计模式之中介者模式怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP设计模式之中介者模式怎么实现”文
2023-07-05

java中的建造者模式是什么

本篇内容主要讲解“java中的建造者模式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中的建造者模式是什么”吧!目录引例一般解法代码:AbstractHouse(房子)Bungal
2023-06-20

java中的装饰者模式是什么

本篇内容介绍了“java中的装饰者模式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录引例一般解法装饰者模式装饰者解法代码:抽象类装
2023-06-20

Java设计模式之中介者模式

这篇文章介绍了Java设计模式之中介者模式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-11-13

JavaScript中什么是装饰者模式

本篇文章为大家展示了JavaScript中什么是装饰者模式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。JavaScript有什么特点1、js属于一种解释性脚本语言;2、在绝大多数浏览器的支持下,j
2023-06-14

javascript中介者模式的代码怎么写

这篇文章主要介绍“javascript中介者模式的代码怎么写”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“javascript中介者模式的代码怎么写”文章能帮助大家解决问题。中介者对象践行了最少知识
2023-06-27

怎么在JavaScript中使用介者模式

今天就跟大家聊聊有关怎么在JavaScript中使用介者模式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript的特点1.JavaScript主要用来向HTML页面添加
2023-06-14

JavaScript设计模式中的桥接和中介者模式怎么实现

这篇文章主要介绍“JavaScript设计模式中的桥接和中介者模式怎么实现”,在日常操作中,相信很多人在JavaScript设计模式中的桥接和中介者模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”J
2023-07-02

java中装饰者模式的原理是什么

java中装饰者模式的原理是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序
2023-06-14

Java编程中的观察者模式是什么

这篇文章主要介绍“Java编程中的观察者模式是什么”,在日常操作中,相信很多人在Java编程中的观察者模式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java编程中的观察者模式是什么”的疑惑有所帮助!
2023-05-30

JavaScript设计模式之中介者模式详解

当对象之间进行多对多引用时,进行开发,维护,阅读时将变得特别痛苦。在这些对象之间添加中间者,使它们都只与中介者,当中介者处理完一个对象的请求后,将结果通知于其他对象
2022-11-13

Java设计模式之中介者模式的实现方式

Java中介者模式是一种行为型设计模式,它通过一个中介者对象来协调多个对象之间的交互,降低对象之间的耦合度,提高系统的可维护性和可扩展性。本文将介绍该设计模式的原理、使用场景和实现方法
2023-05-18

编程热搜

  • 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动态编译

目录