Оглавление:
Карта сайта:
Оглавление:
Карта сайта:
Паттерн Мост (Bridge) в PHP - это структурный паттерн проектирования, который разделяет один или несколько классов на две отдельные и независимые иерархии. Первая иерархия - это абстракция, вторая - это реализация.
Ключевой особенностью паттерна Мост является то, что абстракция и реализация могут изменяться независимо друг от друга без значительных изменений в коде. Это дает более гибкую архитектуру и облегчает добавление нового функционала.
Отделить абстракцию от её реализации так, что они могут изменяться независимо друг от друга.
Вы можете найти этот код на GitHub
Formatter.php
<?php declare(strict_types=1); namespace DesignPatterns\Structural\Bridge; interface Formatter { public function format(string $text): string; }
PlainTextFormatter.php
<?php declare(strict_types=1); namespace DesignPatterns\Structural\Bridge; class PlainTextFormatter implements Formatter { public function format(string $text): string { return $text; } }
HtmlFormatter.php
<?php declare(strict_types=1); namespace DesignPatterns\Structural\Bridge; class HtmlFormatter implements Formatter { public function format(string $text): string { return sprintf('<p>%s</p>', $text); } }
Service.php
<?php declare(strict_types=1); namespace DesignPatterns\Structural\Bridge; abstract class Service { public function __construct(protected Formatter $implementation) { } public function setImplementation(Formatter $printer) { $this->implementation = $printer; } abstract public function get(): string; }
HelloWorldService.php
<?php declare(strict_types=1); namespace DesignPatterns\Structural\Bridge; class HelloWorldService extends Service { public function get(): string { return $this->implementation->format('Hello World'); } }
PingService.php
<?php declare(strict_types=1); namespace DesignPatterns\Structural\Bridge; class PingService extends Service { public function get(): string { return $this->implementation->format('pong'); } }
Tests/BridgeTest.php
<?php declare(strict_types=1); namespace DesignPatterns\Structural\Bridge\Tests; use DesignPatterns\Structural\Bridge\HelloWorldService; use DesignPatterns\Structural\Bridge\HtmlFormatter; use DesignPatterns\Structural\Bridge\PlainTextFormatter; use PHPUnit\Framework\TestCase; class BridgeTest extends TestCase { public function testCanPrintUsingThePlainTextFormatter() { $service = new HelloWorldService(new PlainTextFormatter()); $this->assertSame('Hello World', $service->get()); } public function testCanPrintUsingTheHtmlFormatter() { $service = new HelloWorldService(new HtmlFormatter()); $this->assertSame('<p>Hello World</p>', $service->get()); } }