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 mysql索引问题
Jun 07 PHP
php mb_substr()函数截取中文字符串应用示例
Jul 29 PHP
php中socket的用法详解
Oct 24 PHP
php检查是否是ajax请求的方法
Apr 16 PHP
Laravel 5.3 学习笔记之 配置
Aug 28 PHP
Yii框架中jquery表单验证插件用法示例
Oct 18 PHP
详解PHP5.6.30与Apache2.4.x配置
Jun 02 PHP
PHP用continue跳过本次循环中剩余代码的注意点
Jun 27 PHP
php mysql数据库操作类(实例讲解)
Aug 06 PHP
浅析PHP数据导出知识点
Feb 17 PHP
PHP PDOStatement::debugDumpParams讲解
Jan 30 PHP
Laravel服务容器绑定的几种方法总结
Jun 14 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
模拟flock实现文件锁定
2007/02/14 PHP
yii的CURD操作实例详解
2014/12/04 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
详解YII关联查询
2016/01/10 PHP
JS日历 推荐
2006/12/03 Javascript
javascript 命名规则 变量命名规则
2010/02/25 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
可在线编辑网页文字效果代码(单击)
2013/03/02 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
vuex学习之Actions的用法详解
2017/08/29 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
2019/04/14 Javascript
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
[01:18:45]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第三场2月1日
2021/03/11 DOTA
Python中统计函数运行耗时的方法
2015/05/05 Python
Python提取网页中超链接的方法
2016/09/18 Python
json跨域调用python的方法详解
2017/01/11 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
python列表返回重复数据的下标
2020/02/10 Python
python常用运维脚本实例小结
2020/02/14 Python
纯CSS3实现圆角效果(含IE兼容解决方法)
2014/05/07 HTML / CSS
Yankee Candle官网:美国最畅销蜡烛品牌之一
2020/01/05 全球购物
莫斯科制造商的廉价皮大衣:Fursk
2020/06/09 全球购物
Marlies Dekkers内衣荷兰官方网店:荷兰奢侈内衣品牌
2020/03/27 全球购物
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
2019年.net常见面试问题
2012/02/12 面试题
瀑布模型都有哪些优缺点
2014/06/23 面试题
护理见习报告范文
2014/11/03 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
化验室岗位职责
2015/02/14 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript