=====Посредник (Mediator)=====
**Посредник** — это поведенческий паттерн, который упрощает коммуникацию между компонентами системы.\\
\\
Посредник убирает прямые связи между отдельными компонентами, заставляя их общаться друг с другом через себя.
\\
====Особенности паттерна на PHP====
**Применимость**: Посредник не столь актуален в PHP, как в других языках, из-за того, что разные компоненты приложения не часто общаются друг с другом в пределах одной сессии скрипта.\\
\\
Тем не менее, примерами паттерна могут служить EventDispatcher-ы многих фреймворков, а также некоторые реализации контроллеров в MVC фреймворках.\\
{{ :php:шаблоны_проектирования:mediator.png |}}
\\
Пример структуры паттерна
data = $data;
$this->page = $page;
$this->router = $router;
$this->data->setPageHelper($this);
$this->page->setPageHelper($this);
$this->router->setPageHelper($this);
}
public function sendResponse($content) {
$this->router->output($content);
}
public function getRequest() {
$this->page->render();
}
public function getData() {
return $this->data->getData();
}
}
/**
* Базовый Компонент обеспечивает базовую функциональность хранения экземпляра
* посредника внутри объектов компонентов.
*/
abstract class App
{
protected $pageHelper;
public function setPageHelper(IHelper $pageHelper) {
$this->pageHelper = $pageHelper;
}
}
class Page extends App
{
public function render() {
$data = $this->pageHelper->getData();
$this->pageHelper->sendResponse("Page render with data ". $data);
}
}
class Data extends App
{
public function getData()
{
return 'some data';
}
}
class Router extends App
{
public function request() {
$this->pageHelper->getRequest();
}
public function output(string $content) {
echo $content;
}
}
$router = new Router();
new PageHelper(new Data(), $router, new Page());
$router->request();
Результат выполнения
Page render with data some data