首页 » 网站建设 » webchatphp技巧_PHP设计模式之中介者模式

webchatphp技巧_PHP设计模式之中介者模式

访客 2024-11-20 0

扫一扫用手机浏览

文章目录 [+]

GoF类图

中介者模式

webchatphp技巧_PHP设计模式之中介者模式

代码实现

webchatphp技巧_PHP设计模式之中介者模式
(图片来自网络侵删)

abstractclassMediator{abstractpublicfunctionSend(String$message,Colleague$colleague);}classConcreteMediatorextendsMediator{public$colleague1;public$colleague2;publicfunctionSend(String$message,Colleague$colleague){if($colleague==$this->colleague1){$this->colleague2->Notify($message);}else{$this->colleague1->Notify($message);}}}

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

abstractclassColleague{protected$mediator;publicfunction__construct(Mediator$mediator){$this->mediator=$mediator;}}classConcreteColleague1extendsColleague{publicfunctionSend(String$message){$this->mediator->Send($message,$this);}publicfunctionNotify(String$message){echo"同事1得到信息:".$message,PHP_EOL;}}classConcreteColleague2extendsColleague{publicfunctionSend(String$message){$this->mediator->Send($message,$this);}publicfunctionNotify(String$message){echo"同事2得到信息:".$message;}}

同事类及详细的实现,这里我们要确认的一点便是,每一个同事类,只认识中介者,并不认识其余的同事类,这便是中介者的特点,双方不用认识。

$m=newConcreteMediator();$c1=newConcreteColleague1($m);$c2=newConcreteColleague2($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

实例

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

谈天室类图

谈天室功能中介者模式版

完全源码:https://github.com/zhangyue0503/designpatterns-php/blob/master/15.mediator/source/mediator-webchat.php

<?phpabstractclassMediator{abstractpublicfunctionSend($message,$user);}classChatMediatorextendsMediator{public$users=[];publicfunctionAttach($user){if(!in_array($user,$this->users)){$this->users[]=$user;}}publicfunctionDetach($user){$position=0;foreach($this->usersas$u){if($u==$user){unset($this->users[$position]);}$position++;}}publicfunctionSend($message,$user){foreach($this->usersas$u){if($u==$user){continue;}$u->Notify($message);}}}abstractclassUser{public$mediator;public$name;publicfunction__construct($mediator,$name){$this->mediator=$mediator;$this->name=$name;}}classChatUserextendsUser{publicfunctionSend($message){$this->mediator->Send($message.'('.$this->name.'发送)',$this);}publicfunctionNotify($message){echo$this->name.'收到:'.$message,PHP_EOL;}}$m=newChatMediator();$u1=newChatUser($m,'用户1');$u2=newChatUser($m,'用户2');$u3=newChatUser($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列表就会越来越臃肿了哦,这便是上文中所述的中介者模式的问题所在下期看点

中介者模式是不是很有趣,在某些场景下也确实非常有用。
但是就像之前说的,设计模式并不是万能药,利用各种模式的组合才能形成完全的框架。
这便是现在盛行的各种框架的根本。
以是,学甚至用,并且得当的用,才是我们学习的终极目标。
别急别急,先把模式一个一个弄清楚了再说框架的事,下一个即将到来的是建造者模式,还请连续期待哟。

相关文章

网页SEO排名优化步骤关键词布局的艺术

在互联网时代,网站已经成为企业展示自身形象、拓展市场的重要平台。在众多网站中,如何让自己的网站脱颖而出,吸引更多潜在客户,成为了企...

网站建设 2025-04-09 阅读1 评论0

网络推广的利器,SEO优化步骤全

网络推广已成为企业营销的重要手段。在众多网络推广方法中,SEO(搜索引擎优化)以其独特的优势,成为了企业提升品牌知名度、扩大市场份...

网站建设 2025-04-09 阅读1 评论0

网站首页布局设计SEO优化之路

网站已经成为企业展示自身形象、拓展业务的重要平台。一个优秀的网站首页布局设计,不仅能够提升用户体验,还能为网站带来良好的SEO优化...

网站建设 2025-04-09 阅读1 评论0