-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMediator.php
More file actions
92 lines (77 loc) · 1.75 KB
/
Mediator.php
File metadata and controls
92 lines (77 loc) · 1.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
/**
* 中介者模式, 用一个中介者对象来封装一系列对象之间的交互
* 中介者使各个对象之间不需要显示的引用,从而可以松散的耦合
* 而其可以独立的改变他们之间的交互
*/
interface MediatorInterface
{
public function declared(string $message,Colleague $colleague);
}
/**
* 中介者类
*/
class MediatorUnit implements MediatorInterface
{
private $colleagueUsa;
private $colleagueChina;
public function setUsaCountry(Colleague $colleague)
{
$this->colleagueUsa = $colleague;
}
public function setChinaCountry(Colleague $colleague)
{
$this->colleagueChina = $colleague;
}
public function declared(string $message, Colleague $colleague)
{
if ($colleague == $this->colleagueUsa) {
$this->colleagueChina->getMessage($message);
}
if ($colleague == $this->colleagueChina) {
$this->colleagueUsa->getMessage($message);
}
}
}
abstract class Colleague
{
private $mediator;
public function setMediator(MediatorInterface $mediator)
{
$this->mediator = $mediator;
}
public function declared($message)
{
$this->mediator->declared($message, $this);
}
}
/**
* colleague china
*/
class ChinaColleague extends Colleague
{
public function getMessage($message)
{
echo "use says : ".$message;
}
}
/**
* colleague usa
*/
class UsaColleague extends Colleague
{
public function getMessage($message)
{
echo "china says :".$message;
}
}
$unit = new MediatorUnit();
$china = new ChinaColleague();
$usa = new UsaColleague();
$unit->setUsaCountry($usa);
$unit->setChinaCountry($china);
$china->setMediator($unit);
$usa->setMediator($unit);
$usa->declared("hello i am usa \n");
$china->declared("hello i am china \n");
?>