Wzorce projektowe – Inversion of Control

Założenie: Zrozumieć zasadę Inversion of Control (IoC) na prostym przykładzie w PHP.

Krok po kroku:

  1. Stworzenie interfejsu: Definiujemy interfejs DataProcessor, który określa metodę przetwarzania danych.
  2. 
    interface DataProcessor {
      public function processData(string $data): string;
    }
    				

    Ten fragment kodu definiuje interfejs, który deklaruje metodę processData. Klasy implementujące ten interfejs będą musiały zaimplementować tę metodę.

  3. Implementacja interfejsu: Tworzymy klasę UpperCaseProcessor, która implementuje interfejs DataProcessor i zamienia dane na wielkie litery.
  4. 
    class UpperCaseProcessor implements DataProcessor {
      public function processData(string $data): string {
        return strtoupper($data);
      }
    }
    				

    Ta klasa implementuje metodę processData, która używa funkcji strtoupper do konwersji danych na wielkie litery.

  5. Klasa używająca interfejsu: Tworzymy klasę DataHandler, która przyjmuje obiekt implementujący DataProcessor i używa go do przetworzenia danych.
  6. 
    class DataHandler {
      private DataProcessor $processor;
    
      public function __construct(DataProcessor $processor) {
        $this->processor = $processor;
      }
    
      public function handleData(string $data): string {
        return $this->processor->processData($data);
      }
    }
    				

    Klasa DataHandler przyjmuje w konstruktorze obiekt implementujący DataProcessor. Dzięki temu, możemy łatwo zmienić sposób przetwarzania danych, zmieniając tylko obiekt przekazywany do konstruktora.

  7. Użycie: Tworzymy obiekt DataHandler i używamy go do przetworzenia danych.
  8. 
    $processor = new UpperCaseProcessor();
    $handler = new DataHandler($processor);
    $processedData = $handler->handleData("przykładowy tekst");
    echo $processedData; // Output: PRZYKŁADOWY TEKST
    				

    W tym fragmencie kodu tworzymy obiekt UpperCaseProcessor i przekazujemy go do konstruktora DataHandler. Następnie używamy metody handleData do przetworzenia danych.

Ten przykład pokazuje podstawy zasady Inversion of Control. Zamiast DataHandler tworzyć obiekt UpperCaseProcessor bezpośrednio, zależność jest odwrócona – DataHandler zależy od abstrakcji (interfejsu DataProcessor), a nie od konkretnej implementacji.

Dodaj komentarz 0

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