最近太忙,拖更好多天,难受……

废话不多说,先来看看概念:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地互相引用,从而使其耦合松散,而且可以肚里地改变它们之间的交互。

也就相当于你租了个房子,但是房东常年旅居国外,有事情你也不需要找房东,因为房东把所有事情都委托给了中介。

令人羡慕的房东啊……

举个🌰:

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
<?php

// 中介者模式

interface MediatorInterface
{
public function send($service, string $message);
}

class Mediator implements MediatorInterface
{

public function send($service, string $message)
{
$service->notify($message);
}
}

abstract class Colleague
{
private MediatorInterface $mediator;

protected Colleague $colleague;

public function setColleague(Colleague $colleague)
{
$this->colleague = $colleague;
}

public function getColleague(): Colleague
{
return $this->colleague;
}

public function setMediator(MediatorInterface $mediator)
{
$this->mediator = $mediator;
}

public function getMediator(): MediatorInterface
{
return $this->mediator;
}

public abstract function notify(string $message);
}


class ClientA extends Colleague
{

public function send($message)
{
return $this->getMediator()->send($this, $message);
}

public function notify(string $message)
{
echo get_class($this->getColleague()), ' 收到消息:', $message, PHP_EOL;
}
}

class ClientB extends Colleague
{

public function send($message)
{
return $this->getMediator()->send($this, $message);
}

public function notify(string $message)
{
echo get_class($this->getColleague()), ' 收到消息:', $message, PHP_EOL;
}

}

$mediator = new Mediator();
$clientA = new ClientA();
$clientB = new ClientB();


$clientA->setMediator($mediator);
$clientB->setMediator($mediator);

$clientA->setColleague($clientB);
$clientB->setColleague($clientA);

$clientA->send('吃饭了没?');
$clientB->send('没呢,要请客?');

这个模式比较适用于通讯类产品,聊天啊、直播什么的,可以实现用户与用户之间的结偶,不需要让一个用户去维护所有管理的用户对象,但是同时也存在一些问题,比如当业务逻辑更加复杂时,中介类就会更加复杂和庞大,所以应用的同时也要考虑该如何取舍。

ok,以上就是终结者模式了,代码还是比较通透的。