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 版本]
Mar 20 PHP
php mysql数据库操作类
Jun 04 PHP
攻克CakePHP系列二 表单数据显示
Oct 22 PHP
PHP 类商品秒杀计时实现代码
May 05 PHP
用C/C++扩展你的PHP 为你的php增加功能
Sep 06 PHP
使用php记录用户通过搜索引擎进网站的关键词
Feb 13 PHP
php实现telnet功能示例
Apr 08 PHP
ThinkPHP的Widget扩展实例
Jun 19 PHP
解读PHP中上传文件的处理问题
May 29 PHP
Laravel框架生命周期与原理分析
Jun 12 PHP
PHPUnit + Laravel单元测试常用技能
Nov 06 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
Feb 11 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
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
2013/07/03 PHP
深入Nginx + PHP 缓存详解
2013/07/11 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
js静态方法与实例方法分析
2011/07/04 Javascript
JavaScript高级程序设计 阅读笔记(十七) js事件
2012/08/14 Javascript
JavaScript遍历table表格中的某行某列并打印其值
2014/07/08 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
2016/03/30 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
小程序hover-class点击态效果实现
2019/02/26 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
[44:58]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第二场
2018/04/06 DOTA
使用PyInstaller将Python程序文件转换为可执行程序文件
2016/07/08 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
Python中的正则表达式与JSON数据交换格式
2019/07/03 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
使用python求解二次规划的问题
2020/02/29 Python
python中如何写类
2020/06/29 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
凯普林包包西班牙官网:Kipling西班牙
2019/04/12 全球购物
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
Fanatics官网:运动服装、球衣、运动装备
2020/10/12 全球购物
写出二分查找算法的两种实现
2013/05/13 面试题
小学毕业感言150字
2014/02/05 职场文书
《金子》教学反思
2014/04/13 职场文书
大学新学期计划书
2014/04/28 职场文书
大学生就业自荐书
2014/06/16 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP
JavaScript 事件捕获冒泡与捕获详情
2021/11/11 Javascript