差不多了,睡一觉,下次再弄。
<?php
/*
The more classes we have in our software, the more complex their communication
becomes. The mediator pattern addresses this complexity by encapsulating it into
a mediator object. Objects no longer communicate directly, but rather through a
mediator object, therefore lowering the overall coupling.
*/
interface MediatorInterface {
public function fight();
public function talk();
public function registerA(ColleagueA $a);
public function registerB(ColleagueB $b);
}
class ConcreteMediator implements MediatorInterface {
protected $talk;
protected $fight;
public function registerA(ColleagueA $a) {
$this->talk = $a;
}
public function registerB(ColleagueB $b) {
$this->fight = $b;
}
public function fight() {
echo 'fighting...<br/>';
}
public function talk() {
echo 'talking...<br/>';
}
}
abstract class Colleague {
protected $mediator;
public abstract function doSomething();
}
class ColleagueA extends Colleague {
public function __construct(MediatorInterface $mediator) {
$this->mediator = $mediator;
$this->mediator->registerA($this);
}
public function doSomething() {
$this->mediator->talk();
}
}
class ColleagueB extends Colleague {
public function __construct(MediatorInterface $mediator) {
$this->mediator = $mediator;
$this->mediator->registerB($this);
}
public function doSomething() {
$this->mediator->fight();
}
}
$mediator = new ConcreteMediator();
$talkColleague = new ColleagueA($mediator);
$fightColleague = new ColleagueB($mediator);
$talkColleague->doSomething();
$fightColleague->doSomething();
?>
输出:
talking...
fighting...