<?php
/*
* 中介者模式:用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用从而使其耦合松散,而且可以独立地改变它们之间的交互
*/ /*
* 以一个同学qq群为例说明,qq作为中介者,同学作为相互交互的对象
*/ //抽象中介者,利用中介发送消息
abstract class Mediator{
abstract function send($message,$user);
} //抽象同事类,利用中介发送消息
abstract class Colleague{
private $mediator; public function __construct($mediator){
$this->mediator = $mediator;
} public function send($message){
$this->mediator->send($message,$this);
} abstract function notify($message);
} //具体的同事类a b c d e
class StuA extends Colleague{
public function notify($message){
echo 'Stu A says: '.$message;
echo "<br/>";
}
} class StuB extends Colleague{
public function notify($message){
echo 'Stu B says: '.$message;
echo "<br/>";
}
} class StuC extends Colleague{
public function notify($message){
echo 'Stu C says: '.$message;
echo "<br/>";
}
} class StuD extends Colleague{
public function notify($message){
echo 'Stu D says: '.$message;
echo "<br/>";
}
} class StuE extends Colleague{
public function notify($message){
echo 'Stu E says: '.$message;
echo "<br/>";
}
} //具体的中介者
class QQ extends Mediator{
public $users = array(); public function setUsers($user){//把对象添加进来
$this->users[] = $user;
} public function send($message, $user){//推送消息
for($i=0;$i<count($this->users);$i++){
if($user == $this->users[$i]){
$this->users[$i]->notify($message);
}
}
}
} class Client{
public static function main(){
//流程:先建立中介者
$qq = new QQ();
//实例化交互对象
$stu_a = new StuA($qq);
$stu_b = new StuB($qq);
$stu_c = new StuC($qq);
$stu_d = new StuD($qq);
$stu_e = new StuE($qq);
//把对象加入中介者
$qq->setUsers($stu_b);
$qq->setUsers($stu_a);
$qq->setUsers($stu_c);
$qq->setUsers($stu_d);
$qq->setUsers($stu_e); //交流
$stu_a->send('昨天点名了吗,各位大神');
$stu_c->send('难道你没去');
$stu_a->send('是啊');
$stu_b->send('恭喜你中奖了');
$stu_d->send('恭喜你中奖了');
$stu_e->send('恭喜你中奖了');
$stu_a->send('我去');
}
} Client::main();
?>

  UML类图如下

php实现设计模式之 中介者模式的更多相关文章

  1. 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)

    原文:乐在其中设计模式(C#) - 中介者模式(Mediator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern) 作者:weba ...

  2. 折腾Java设计模式之中介者模式

    博文原址:折腾Java设计模式之中介者模式 中介者模式 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并 ...

  3. js设计模式——8.中介者模式

    js设计模式——8.中介者模式 /*js设计模式——中介者模式*/ class A { constructor() { this.number = 0; } setNumber(num, m) { t ...

  4. 【GOF23设计模式】中介者模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_中介者模式.同事协作类.内部类实现 package com.test.mediator; /** * 同事类的接口 */ ...

  5. [设计模式] 17 中介者模式 Mediator Pattern

    在GOF的<设计模式:可复用面向对象软件的基础>一书中对中介者模式是这样说的:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变 ...

  6. 再起航,我的学习笔记之JavaScript设计模式23(中介者模式)

    中介者模式 概念介绍 中介者模式(Mediator):通过中介者对象封装一系列对象之间的交互,使对象之间不再相互引用降低他们之间的耦合,有时中介者对象也可以改变对象之间的交互. 创建一个中介 中介者模 ...

  7. 设计模式之中介者模式(Mediator )

    中介者模式是关于数据交互的设计模式,该模式的核心是一个中介者对象,负责协调一系列对象之间的不同的数据请求,这一系列对象成为同事类.如房产中介(简直不想提它),买房的卖房的,租房的放租的都到房产中介那里 ...

  8. PHP设计模式系列 - 中介者模式

    中介者模式 中介者模式用于开发一个对象,这个对象能够在类似对象相互之间不直接相互的情况下传送或者调解对这些对象的集合的修改.一般处理具有类似属性,需要保持同步的非耦合对象时,最佳的做法就是中介者模式. ...

  9. 深入理解JavaScript系列(36):设计模式之中介者模式

    介绍 中介者模式(Mediator),用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 主要内容来自:http://www ...

  10. Java 设计模式之中介者模式

    本文继续23种设计模式系列之中介者模式.   定义 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互.   角色 抽象中介者: ...

随机推荐

  1. SQL Server 2012 Managed Service Account

    原创地址:http://www.cnblogs.com/jfzhu/p/4007472.html 转载请注明出处 (一)Windows服务使用的登陆帐号 Windows服务只有登录到某一帐户的情况下才 ...

  2. <canvas>drawImage()方法无法显示图片

    在书上看到用<canvas>绘制图像就动手试试,刚开始,我的代码是这样的: <!DOCTYPE html> <html> <head> <meta ...

  3. sublime3 插件

    Sublime Text 3能用支持的插件推荐 从二月份用测试版本build 3012开始用sublime text 3,虽然很多插件在sublime text 3不工作了,因为sublime tex ...

  4. C#设计模式-桥接模式

    这里以电视遥控器的一个例子来引出桥接模式解决的问题,首先,我们每个牌子的电视机都有一个遥控器,此时我们能想到的一个设计是——把遥控器做为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视品牌的遥控 ...

  5. Laravel 5.3 auth中间件底层实现详解

    1. 注册认证中间件, 在文件 app/Http/Kernel.php 内完成: protected $routeMiddleware = [ 'auth' => \Illuminate\Aut ...

  6. HTML5应用缓存机制

    首先先上一张图: 用360浏览器的用户对这张图应该都是耳熟能详了吧,没错,当网络不通畅时使用360浏览器,便会有这张图弹出来.为什么没有网络还能弹出这一副画面呢?这就关乎HTML5的应用缓存机制了. ...

  7. OpenCASCADE General Transformation

    OpenCASCADE General Transformation eryar@163.com Abstract. OpenCASCADE provides a general transforma ...

  8. Neutron 架构 - 每天5分钟玩转 OpenStack(67)

    前面我们讨论了 Neutron 的基本概念,今天我们开始分析 Neutron 的架构. Neutron 架构 与 OpenStack 的其他服务的设计思路一样,Neutron 也是采用分布式架构,由多 ...

  9. DOM-Document类型

    Document类型 JavaScript通过Document类型表示文档.在浏览器中,document对象是HTMLDocument(继承自Document类型)的一个实例,document对象是w ...

  10. The network bridge on device VMnet0 is not running

    The network bridge on device VMnet0 is not running. The virtual machine will not be able to communic ...