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:

  1. 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.

  2. Implementacja konkretnych rendererów: Stwórzmy dwie implementacje Renderer: HtmlRenderer i TextRenderer.
    
    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";
      }
    }
    

    HtmlRenderer dodaje znaczniki HTML, a TextRenderer dodaje znak nowej linii.

  3. Klasa abstrakcyjna lub interfejs dla danych: Stwórzmy interfejs Data.
    
    interface Data {
        public function getData(): string;
    }
    
  4. Klasa implementująca dane: Stwórzmy klasę MyData implementującą interfejs Data.
    
    class MyData implements Data {
        private string $data;
    
        public function __construct(string $data) {
            $this->data = $data;
        }
    
        public function getData(): string {
            return $this->data;
        }
    }
    
  5. Klasa Bridge: Stwórzmy klasę Bridge, która łączy Data i Renderer.
    
    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());
      }
    }
    
  6. Użycie: Teraz możemy użyć klasy Bridge z 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.

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *