1 <?php
2 abstract class Mediator{
3 abstract public function send($message, $colleague);
4 }
5
6 abstract class Colleague{
7 private $_mediator = null;
8 public function __construct($mediator){
9 $this->_mediator = $mediator;
10 }
11
12 public function send($message){
13 $this->_mediator->send($message, $this);
14 }
15
16 abstract public function notify($message);
17 }
18
19 class ConcreteMediator extends Mediator{
20 private $_colleague1 = null;
21 private $_colleague2 = null;
22 public function send($message, $colleague){
23 if($colleague == $this->_colleague1){
24 $this->_colleague2->notify($message);
25 }else{
26 $this->_colleague1->notify($message);
27 }
28 }
29
30 public function set($colleague1, $colleague2){
31 $this->_colleague1 = $colleague1;
32 $this->_colleague2 = $colleague2;
33 }
34 }
35
36 class Colleague1 extends Colleague{
37 public function notify($message){
38 echo 'Colleague1 recv :'.$message;
39 }
40 }
41
42 class Colleague2 extends Colleague{
43 public function notify($message){
44 echo 'Colleague2 recv: '.$message;
45 }
46 }
47
48 $mediator = new ConcreteMediator();
49 $objC1 = new Colleague1($mediator);
50 $objC2 = new Colleague2($mediator);
51
52 $mediator->set($objC1,$objC2);
53
54 $objC1->send('to c2 from c1');
55 echo '<br>';
56 $objC2->send('to c1 from c2');
57 ?>