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 相关文章推荐
建立动态的WML站点(三)
Oct 09 PHP
Discuz Uchome ajaxpost小技巧
Jan 04 PHP
兼容性比较好的PHP生成缩略图的代码
Jan 12 PHP
PHP中使用crypt()实现用户身份验证的代码
Sep 05 PHP
浅析十款PHP开发框架的对比
Jul 05 PHP
php中AES加密解密的例子小结
Feb 18 PHP
PHP闭包实例解析
Sep 08 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
Jun 19 PHP
laravel5创建service provider和facade的方法详解
Jul 26 PHP
PHP缓存工具XCache安装与使用方法详解
Apr 09 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 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线性表的入栈与出栈实例分析
2015/06/12 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
thinkPHP中volist标签用法示例
2016/12/06 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
2014/02/07 Javascript
jQuery中noConflict()用法实例分析
2015/02/08 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
JavaScript中Function()函数的使用教程
2015/06/04 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
vue组件开发props验证的实现
2019/02/12 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
简单介绍利用TK在Python下进行GUI编程的教程
2015/04/13 Python
Python基础入门之seed()方法的使用
2015/05/15 Python
Python中模块与包有相同名字的处理方法
2017/05/05 Python
从CentOS安装完成到生成词云python的实例
2017/12/01 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
Python异常处理操作实例详解
2018/08/28 Python
Python解决两个整数相除只得到整数部分的实例
2018/11/10 Python
Python Django切换MySQL数据库实例详解
2019/07/16 Python
python连接mysql有哪些方法
2020/06/24 Python
python3中TQDM库安装及使用详解
2020/11/18 Python
美国女性奢华品牌精品店:INTERMIX
2017/10/12 全球购物
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
思想汇报范文
2013/11/04 职场文书
《再见了,亲人》教学反思
2014/02/26 职场文书
空气环保标语
2014/06/12 职场文书
环保志愿者活动总结
2014/06/27 职场文书
教师拔河比赛广播稿
2014/10/14 职场文书
详细介绍python操作RabbitMq
2022/04/12 Python