Оглавление:
Карта сайта:
Оглавление:
Карта сайта:
Это старая версия документа!
Посредник — это поведенческий паттерн, который упрощает коммуникацию между компонентами системы.
Посредник убирает прямые связи между отдельными компонентами, заставляя их общаться друг с другом через себя.
Применимость: Посредник не столь актуален в PHP, как в других языках, из-за того, что разные компоненты приложения не часто общаются друг с другом в пределах одной сессии скрипта.
Тем не менее, примерами паттерна могут служить EventDispatcher-ы многих фреймворков, а также некоторые реализации контроллеров в MVC фреймворках.
<?php /** * Интерфейс Посредника предоставляет методы, используемый компонентами для * для вывода страницы */ interface IHelper { public function sendResponse($content); public function getRequest(); public function getData(); } /** * Конкретные Посредники реализуют совместное поведение, координируя отдельные * компоненты. */ class PageHelper implements IHelper { public $data; public $page; public $router; public function __construct($data, $router, $page) { $this->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