博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP设计模式——中介者模式
阅读量:5844 次
发布时间:2019-06-18

本文共 1966 字,大约阅读时间需要 6 分钟。

声明:本系列博客参考资料《大话设计模式》,作者程杰。

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

        UML类图:

        

          角色:       

          中介者接口(UnitedNations):在里面定义了各个同事之间相互交互所需要的方法。

          具体的中介者实现对象(UnitedCommit):它需要了解并为维护每个同事对象,并负责具体的协调各个同事对象的交互关系。

          同事类的定义(Country):通常实现成为抽象类,主要负责约束同事对象的类型,并实现一些具体同事类之间的公共功能,

          具体的同事类(China):实现自己的业务,需要与其他同事对象交互时,就通知中介对象,中介对象会负责后续的交互。

         核心代码:

         

mediator = $_mediator; }}//具体国家类//美国class USA extends Country{ function __construct(UnitedNations $mediator) { parent::__construct($mediator); } //声明 public function Declared($message) { $this->mediator->Declared($message,$this); } //获得消息 public function GetMessage($message) { echo "美国获得对方消息:$message
"; }}//中国class China extends Country{ public function __construct(UnitedNations $mediator) { parent::__construct($mediator); } //声明 public function Declared($message) { $this->mediator->Declared($message, $this); } //获得消息 public function GetMessage($message) { echo "中方获得对方消息:$message
"; }}//抽象中介者//抽象联合国机构abstract class UnitedNations{ //声明 public abstract function Declared($message,Country $colleague);}//联合国机构class UnitedCommit extends UnitedNations{ public $countryUsa; public $countryChina; //声明 public function Declared($message, Country $colleague) { if($colleague==$this->countryChina) { $this->countryUsa->GetMessage($message); } else { $this->countryChina->GetMessage($message); } }}
          调用客户端测试代码:

         

header("Content-Type:text/html;charset=utf-8");//--------------------------中介者模式-------------------require_once "./Mediator/Mediator.php";//测试代码块$UNSC = new UnitedCommit();$c1 = new USA($UNSC);$c2 = new China($UNSC);$UNSC->countryChina = $c2;$UNSC->countryUsa =$c1;$c1->Declared("姚明的篮球打的就是好");$c2->Declared("谢谢。");
       适用场景:

       1、如果一组对象之间的通信方式比较复杂,导致相互依赖,结构混乱,可以采用中介者模式

       2、如果一个对象引用很多对象,并且跟这些对象交互,导致难以复用该对象

       欢迎关注我的视频课程,地址如下,谢谢。

你可能感兴趣的文章
美国政府机构将限制数据中心的建设
查看>>
Redis和Ssdb读取性能对比
查看>>
2016年国内IDC市场达到714.5亿 同比增长37.8%
查看>>
Oracle 12c多租户特性详解:PDB 的创建、克隆与维护
查看>>
网络摄像头路由器存漏洞 使用智能设备需注意安全
查看>>
《ANTLR 4权威指南》——第3章 入门的ANTLR项目 3.1 ANTLR工具、运行库以及自动生成的代码...
查看>>
Nginx报错403 forbidden几个解决方法
查看>>
《软技能:代码之外的生存指南》导读
查看>>
复制策略与复制的方式 【已翻译100%】(2/2)
查看>>
《CCNP SWITCH 300-115认证考试指南》——2.2节2层交换原理
查看>>
《人脸识别原理及算法——动态人脸识别系统研究》—1章1.4节人脸图像识别主要研究的问题...
查看>>
01_Linux系统系统语言查询,设置Xshell工具,中文显示,测试Xshell中文字符显示,Linux中文显示乱码设置...
查看>>
如何成为一个成功的软件工程师
查看>>
基于 Arduino 开发板,这款插座是可编程且开源的
查看>>
CM 之父被踢出局:与乔布斯经历了同样的悲惨境遇
查看>>
《淘宝店铺 大数据营销+SEO+爆款打造 一册通》一一2.7 关注单品分析,打造店铺爆款...
查看>>
《I'm a Mac:雄狮训练手册》——1.11 自动开机
查看>>
《机器学习系统设计:Python语言实现》一1.3 总结
查看>>
(九)万事俱备
查看>>
在 Linux 上配置一个 syslog 服务器
查看>>