PHP - паттерн Мост пример кода
Primary tabs
Автор примера: Enrico Zimuel (enrico@zimuel.it)
Наименование участников (что значит) и описание паттерна здесь.
<?php /* релазитор - обобщённый*/ interface DrawingAPI { public function drawCircle($x, $y, $radius); } /*конкретный релазитор */ class DrawingAPI1 implements DrawingAPI { public function drawCircle($x, $y, $radius) { printf ("API1 draw (%d, %d, %d)\n", $x, $y, $radius); // печатаем (полезный функционал) } } /* ещё один конкретный релазитор */ class DrawingAPI2 implements DrawingAPI { public function drawCircle($x, $y, $radius) { printf ("API2 draw (%d, %d, %d)\n", $x, $y, $radius); } } // Абстракция abstract class Shape { protected $api; protected $x; protected $y; // при создании этот класс "хочет" получить ссылку на реализацию public function __construct(DrawingAPI $api) { $this->api = $api; } } /*Уточнённая абстракция - этот класс как мы видим расширяет интерфейс - есть уже конкретная функция draw() - да и конструктор переопределён - короче - "что-то добавили* =) Но - реалазация по-прежнему держится на передаваемом в конструктор DrawingAPI $api */ class CircleShape extends Shape { protected $radius; public function __construct($x, $y, $radius, DrawingAPI $api) { parent::__construct($api); $this->x = $x; $this->y = $y; $this->radius = $radius; } public function draw() { $this->api->drawCircle($this->x, $this->y, $this->radius); } } // Пример использования: $shapes = array( new CircleShape(1, 3, 7, new DrawingAPI1()), new CircleShape(5, 7, 11, new DrawingAPI2()), ); foreach ($shapes as $sh) { $sh->draw(); // демонстрация процесса использования завершена =) }
- Log in to post comments
- 3665 reads