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.MVC的模板标签系统(四)
Sep 05 PHP
PHP.MVC的模板标签系统(五)
Sep 05 PHP
php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
Mar 23 PHP
PHP获取http请求的头信息实现步骤
Dec 16 PHP
克隆一个新项目的快捷方式
Apr 10 PHP
PHP函数in_array()使用详解
Aug 20 PHP
php字符串函数学习之strstr()
Mar 27 PHP
PHP pear安装配置教程
May 14 PHP
nginx下安装php7+php5
Jul 31 PHP
根据key删除数组中指定的元素实现方法
Mar 02 PHP
ThinkPHP开发--使用七牛云储存
Sep 14 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
Aug 12 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
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
求得div 下 img的src地址的js代码
2007/02/28 Javascript
JavaScript性能陷阱小结(附实例说明)
2010/12/28 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
固定背景实现的背景滚动特效示例分享
2013/05/19 Javascript
jquery text()方法取标签中的文本
2014/07/25 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
关于javascript事件响应的基础语法总结(必看篇)
2016/12/26 Javascript
js模拟微博发布消息
2017/02/23 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
浅谈react前后端同构渲染
2017/09/20 Javascript
vue element动态渲染、移除表单并添加验证的实现
2019/01/16 Javascript
Vue 进阶之路(三)
2019/04/18 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
2019/09/26 Javascript
layer.confirm()右边按钮实现href的例子
2019/09/27 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
浅谈Django自定义模板标签template_tags的用处
2017/12/20 Python
flask session组件的使用示例
2018/12/25 Python
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
使用pth文件添加Python环境变量方式
2020/05/26 Python
windows支持哪个版本的python
2020/07/03 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
最新的大学生找工作自我评价
2013/09/29 职场文书
师范学院教师自荐书
2014/01/31 职场文书
教师节演讲稿
2014/05/06 职场文书
公司口号大全
2014/06/11 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
2022/03/23 MySQL
Java 使用类型为Object的变量指向任意类型的对象
2022/04/13 Java/Android