Посередник
Аналогія
Коли ви розмовляєте з кимось по мобільному, то між вами та співрозмовником знаходиться мобільний оператор. Тобто сигнал передається через нього, а не безпосередньо. У цьому прикладі оператор — посередник.
Стисло
Шаблон «Посередник» має на увазі додавання стороннього об'єкта («посередника») для керування взаємодією між двома об'єктами («колегами»). Шаблон допомагає зменшити пов'язаність (coupling) класів, які спілкуються один з одним, адже тепер вони не повинні знати про реалізацію своїх співрозмовників.
Вікіпедія
Шаблон визначає об'єкт, що інкапсулює спосіб взаємодії набору об'єктів.
Приклад
Найпростіший приклад: чат («посередник»), у якому користувачі («колеги») надсилають одне одному повідомлення.
Створимо «посередника»:
interface ChatRoomMediator
{
public function showMessage(User $user, string $message);
}
// Посередник
class ChatRoom implements ChatRoomMediator
{
public function showMessage(User $user, string $message)
{
$time = date('M d, y H:i');
$sender = $user->getName();
echo $time. '['. $ sender . ']:'. $ Message;
}
}
Тепер створимо «колег»:
class User {
protected $name;
protected $chatMediator;
public function __construct(string $name, ChatRoomMediator $chatMediator) {
$this->name = $name;
$this->chatMediator = $chatMediator;
}
public function getName() {
return $this->name;
}
public function send($message) {
$this->chatMediator->showMessage($this, $message);
}
}
Використання:
$mediator = новий ChatRoom();
$john = new User('John Doe', $mediator);
$jane = new User('Jane Doe', $mediator);
$john->send('Hi there!');
$jane->send('Hey!');
// Вихідний вигляд
// Feb 14, 10:58 [John]: Hi there!
// Feb 14, 10:58 [Jane]: Hey!