Wzorce projektowe – Mediator
Założenie: Zrozumieć i zaimplementować prosty przykład wzorca projektowego Mediator w PHP, aby zarządzać komunikacją między kilkoma obiektami.
Krok po kroku:
- Stworzenie interfejsu Mediator: Definiujemy interfejs, który będzie określał metody komunikacji między obiektami.
- Stworzenie klasy Colleague: Definiujemy klasę reprezentującą obiekt uczestniczący w komunikacji.
- Implementacja konkretnego mediatora: Tworzymy klasę implementującą interfejs
Mediator
. - Użycie mediatora: Tworzymy instancje i uruchamiamy komunikację.
interface Mediator {
public function send(string $message, Colleague $colleague);
}
Ten kod definiuje interfejs Mediator
z metodą send
, która przyjmuje wiadomość i obiekt Colleague
(opisany poniżej) jako argumenty.
class Colleague {
private $mediator;
private $name;
public function __construct(Mediator $mediator, string $name) {
$this->mediator = $mediator;
$this->name = $name;
}
public function send(string $message) {
$this->mediator->send($message, $this);
}
public function receive(string $message) {
echo "{$this->name}: Otrzymałem wiadomość: {$message}\n";
}
}
Klasa Colleague
posiada mediatora, imię i metody wysyłania i odbierania wiadomości.
class ConcreteMediator implements Mediator {
private $colleague1;
private $colleague2;
public function __construct(Colleague $colleague1, Colleague $colleague2) {
$this->colleague1 = $colleague1;
$this->colleague2 = $colleague2;
}
public function send(string $message, Colleague $colleague) {
if ($colleague === $this->colleague1) {
$this->colleague2->receive($message);
} else {
$this->colleague1->receive($message);
}
}
}
Klasa ConcreteMediator
zarządza komunikacją między dwoma obiektami Colleague
.
$mediator = new ConcreteMediator(new Colleague($mediator, "Kolega 1"), new Colleague($mediator, "Kolega 2"));
$mediator->colleague1->send("Cześć!");
Ten kod tworzy mediatora i dwóch kolegów, a następnie wysyła wiadomość.
Ten przykład pokazuje podstawowe zastosowanie wzorca Mediator. Zachęcamy do dalszego zgłębiania tematu wzorców projektowych w PHP!