php设计模式 Mediator (中介者模式)


Posted in PHP onJune 26, 2011
<?php 
/** 
* 中介者模式 
* 
* 用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用从而使其耦合松散,而且可以独立地改变它们之间的交互 
*/ 
abstract class Mediator 
{ 
abstract public function send($message,$colleague); 
} 
abstract class Colleague 
{ 
private $_mediator = null; 
public function Colleague($mediator) 
{ 
$this->_mediator = $mediator; 
} 
public function send($message) 
{ 
$this->_mediator->send($message,$this); 
} 
abstract public function notify($message); 
} 
class ConcreteMediator extends Mediator 
{ 
private $_colleague1 = null; 
private $_colleague2 = null; 
public function send($message,$colleague) 
{ 
if($colleague == $this->_colleague1) 
{ 
$this->_colleague1->notify($message); 
} else { 
$this->_colleague2->notify($message); 
} 
} 
public function set($colleague1,$colleague2) 
{ 
$this->_colleague1 = $colleague1; 
$this->_colleague2 = $colleague2; 
} 
} 
class Colleague1 extends Colleague 
{ 
public function notify($message) 
{ 
echo "Colleague1 Message is :".$message."<br/>"; 
} 
} 
class Colleague2 extends Colleague 
{ 
public function notify($message) 
{ 
echo "Colleague2 Message is :".$message."<br/>"; 
} 
} 
// 
$objMediator = new ConcreteMediator(); 
$objC1 = new Colleague1($objMediator); 
$objC2 = new Colleague2($objMediator); 
$objMediator->set($objC1,$objC2); 
$objC1->send("to c2 from c1"); 
$objC2->send("to c1 from c2");
PHP 相关文章推荐
php中3种方法删除字符串中间的空格
Mar 10 PHP
教你如何解密 “ PHP 神盾解密工具 ”
Jun 20 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
Oct 15 PHP
一个经典实用的PHP图像处理类分享
Nov 18 PHP
PHP中mysqli_affected_rows作用行数返回值分析
Dec 26 PHP
php实现对象克隆的方法
Jun 20 PHP
Laravel重写用户登录简单示例
Oct 08 PHP
如何打开php的gd2库
Feb 09 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
Aug 15 PHP
laravel框架查询数据集转为数组的两种方法
Oct 10 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
Oct 12 PHP
详解no input file specified 三种解决方法
Nov 29 PHP
php设计模式 Prototype (原型模式)代码
Jun 26 #PHP
PHP如何解决网站大流量与高并发的问题
Jun 25 #PHP
session在PHP大型web应用中的使用
Jun 25 #PHP
php URL跳转代码 减少外链
Jun 25 #PHP
php session安全问题分析
Jun 24 #PHP
使用PHP实现二分查找算法代码分享
Jun 24 #PHP
PHP求最大子序列和的算法实现
Jun 24 #PHP
You might like
ASP和PHP都是可以删除自身的
2007/04/09 PHP
windows环境下php配置memcache的具体操作步骤
2013/06/09 PHP
PHP中4种常用的抓取网络数据方法
2015/06/04 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
基于Jquery与WebMethod投票功能实现代码
2011/01/19 Javascript
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
2012/01/13 Javascript
Js 时间函数getYear()的使用问题探讨
2013/04/01 Javascript
JavaScript中的undefined学习总结
2013/11/30 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
javascript异步编程代码书写规范Promise学习笔记
2015/02/11 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
2015/06/01 Javascript
ECMAScript6新增值比较函数Object.is
2015/06/12 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
Parcel 打包示例(React HelloWorld)
2018/01/16 Javascript
AngularJs返回前一页面时刷新一次前面页面的方法
2018/10/09 Javascript
实例详解vue中的$root和$parent
2019/04/29 Javascript
[53:52]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
王纯业的Python学习笔记 下载
2007/02/10 Python
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
python每隔N秒运行指定函数的方法
2015/03/16 Python
详解在Python程序中自定义异常的方法
2015/10/16 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
python中time库的实例使用方法
2019/10/31 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
公益活动策划方案
2014/01/09 职场文书
英语感恩演讲稿
2014/01/14 职场文书
优秀毕业自我鉴定
2014/02/15 职场文书
材料物理专业求职信
2014/09/01 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
施工现场安全管理制度
2015/08/05 职场文书
《进击的巨人》新联动CM 兵长强势出击兽巨人
2022/04/05 日漫