=====Посредник (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