文章摘要
这篇文章介绍了中介者模式(Mediator Pattern)的实现,通过PHP代码展示了如何使用该模式协调不同组件之间的交互。文章首先定义了抽象中介者类(`Mediator`)和抽象同事类(`Colleague`),并明确了它们的接口方法。接着,具体实现了`ConcreteMediator`类,该类通过设置不同的“同事”对象来决定消息传递的目标。最后,示例展示了如何通过`ConcreteColleague1`和`ConcreteColleague2`类,利用中介者模式实现消息在不同组件之间的传递与响应。文章整体上简洁明了,重点突出中介者模式的核心思想及其在实际编程中的应用。
<?php
// 抽象中介者
abstract class Mediator
{
abstract public function send($message, $colleague);
}
// 抽象同事类
abstract class Colleague
{
protected $mediator;
public function __construct(Mediator $mediator)
{
$this->mediator=$mediator;
}
abstract public function send($message);
abstract public function receive($message);
}
// 具体中介者
class ConcreteMediator extends Mediator
{
private $colleague1;
private $colleague2;
public function setColleague1(Colleague $colleague)
{
$this->colleague1=$colleague;
}
public function setColleague2(Colleague $colleague)
{
$this->colleague2=$colleague;
}
public function send($message, $colleague)
{
if ($colleague==$this->colleague1) {
$this->colleague2->receive($message);
} else {
$this->colleague1->receive($message);
}
}
}
// 具体同事类
class ConcreteColleague1 extends Colleague
{
public function send($message)
{
$this->mediator->send($message, $this);
}
public function receive($message)
{
echo “ConcreteColleague1 received message: $message\n”;
}
}
class ConcreteColleague2 extends Colleague
{
public function send($message)
{
$this->mediator->send($message, $this);
}
public function receive($message)
{
echo “ConcreteColleague2 received message: $message\n”;
}
}
// 抽象中介者
abstract class Mediator
{
abstract public function send($message, $colleague);
}
// 抽象同事类
abstract class Colleague
{
protected $mediator;
public function __construct(Mediator $mediator)
{
$this->mediator=$mediator;
}
abstract public function send($message);
abstract public function receive($message);
}
// 具体中介者
class ConcreteMediator extends Mediator
{
private $colleague1;
private $colleague2;
public function setColleague1(Colleague $colleague)
{
$this->colleague1=$colleague;
}
public function setColleague2(Colleague $colleague)
{
$this->colleague2=$colleague;
}
public function send($message, $colleague)
{
if ($colleague==$this->colleague1) {
$this->colleague2->receive($message);
} else {
$this->colleague1->receive($message);
}
}
}
// 具体同事类
class ConcreteColleague1 extends Colleague
{
public function send($message)
{
$this->mediator->send($message, $this);
}
public function receive($message)
{
echo “ConcreteColleague1 received message: $message\n”;
}
}
class ConcreteColleague2 extends Colleague
{
public function send($message)
{
$this->mediator->send($message, $this);
}
public function receive($message)
{
echo “ConcreteColleague2 received message: $message\n”;
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。



