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 相关文章推荐
JAVA/JSP学习系列之二
Oct 09 PHP
php下用cookie统计用户访问网页次数的代码
May 09 PHP
smarty基础之拼接字符串的详解
Jun 18 PHP
php定界符
Jun 19 PHP
phpmyadmin中禁止外网使用的方法
Nov 04 PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 PHP
php检测文本的编码
Jul 26 PHP
php session的锁和并发
Jan 22 PHP
php中关于长度计算容易混淆的问题分析
May 27 PHP
PHP会话操作之cookie用法分析
Sep 28 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
Oct 15 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 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
destoon之一键登录设置
2014/06/21 PHP
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
Highcharts 非常实用的Javascript统计图demo示例
2013/07/03 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
使用ionic切换页面卡顿的解决方法
2016/12/16 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
深入对Vue.js $watch方法的理解
2017/03/20 Javascript
微信小程序 侧滑删除(左滑删除)
2017/05/23 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
JS动态显示倒计时效果
2019/12/12 Javascript
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
python命令行参数sys.argv使用示例
2014/01/28 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
2015/05/22 Python
python统计文本文件内单词数量的方法
2015/05/30 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
详解使用django-mama-cas快速搭建CAS服务的实现
2019/10/30 Python
简单介绍django提供的加密算法
2019/12/18 Python
Python bytes string相互转换过程解析
2020/03/05 Python
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
TCP/IP的分层模型
2013/10/27 面试题
abstract class和interface有什么区别
2013/08/04 面试题
自我评价怎么写正确呢?
2013/12/02 职场文书
大学生收银员求职信分享
2014/01/02 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
4S店收银员岗位职责
2015/04/07 职场文书
合同补充协议书
2016/03/24 职场文书
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL
docker 制作mysql镜像并自动安装
2022/05/20 Servers