Wzorce projektowe – Bridge
Założenie: Zrozumieć i zaimplementować wzorzec projektowy Bridge, który oddziela abstrakcyjny interfejs od jego implementacji, pozwalając na niezależne zmienianie obu części.
Krok po kroku:
- Stworzenie abstrakcyjnego interfejsu: Zdefiniujmy interfejs
Renderer, który będzie odpowiedzialny za renderowanie danych.interface Renderer { public function render(string $data): string; }Ten interfejs definiuje metodę
render, która przyjmuje dane tekstowe i zwraca sformatowany tekst. - Implementacja konkretnych rendererów: Stwórzmy dwie implementacje
Renderer:HtmlRendereriTextRenderer.class HtmlRenderer implements Renderer { public function render(string $data): string { return "<p>" . htmlspecialchars($data) . "</p>"; } } class TextRenderer implements Renderer { public function render(string $data): string { return $data . "\n"; } }HtmlRendererdodaje znaczniki HTML, aTextRendererdodaje znak nowej linii. - Klasa abstrakcyjna lub interfejs dla danych: Stwórzmy interfejs
Data.interface Data { public function getData(): string; } - Klasa implementująca dane: Stwórzmy klasę
MyDataimplementującą interfejsData.class MyData implements Data { private string $data; public function __construct(string $data) { $this->data = $data; } public function getData(): string { return $this->data; } } - Klasa Bridge: Stwórzmy klasę
Bridge, która łączyDataiRenderer.class Bridge { private Renderer $renderer; private Data $data; public function __construct(Renderer $renderer, Data $data) { $this->renderer = $renderer; $this->data = $data; } public function show(): string { return $this->renderer->render($this->data->getData()); } } - Użycie: Teraz możemy użyć klasy
Bridgez różnymi rendererami.$data = new MyData("To jest przykładowy tekst."); $htmlRenderer = new HtmlRenderer(); $textRenderer = new TextRenderer(); $bridgeHtml = new Bridge($htmlRenderer, $data); $bridgeText = new Bridge($textRenderer, $data); echo $bridgeHtml->show(); // Wyświetli: <p>To jest przykładowy tekst.</p> echo $bridgeText->show(); // Wyświetli: To jest przykładowy tekst.
Ten przykład pokazuje podstawowe zastosowanie wzorca Bridge. Zachęcamy do dalszego zgłębiania tematu i eksperymentowania z różnymi implementacjami.