Wzorce projektowe – Composite

Założenie: Stworzymy prosty przykład wzorca Composite, który pozwoli nam reprezentować zarówno pojedyncze elementy, jak i grupy elementów w drzewiastej strukturze.

Krok po kroku:

  1. Definicja interfejsu Component: Ten interfejs zdefiniuje metody wspólne dla wszystkich elementów, zarówno pojedynczych, jak i złożonych.
  2. 
    interface Component {
      public function operation(): string;
    }
    				
  3. Klasa Leaf (liść): Reprezentuje pojedynczy element w strukturze.
  4. 
    class Leaf implements Component {
      private string $name;
    
      public function __construct(string $name) {
        $this->name = $name;
      }
    
      public function operation(): string {
        return "Liść: " . $this->name;
      }
    }
    				
  5. Klasa Composite (złożony): Reprezentuje grupę elementów. Zawiera metodę dodawania i usuwania elementów podrzędnych.
  6. 
    class Composite implements Component {
      private array $children = [];
    
      public function add(Component $component): void {
        $this->children[] = $component;
      }
    
      public function remove(Component $component): void {
        $key = array_search($component, $this->children, true);
        if ($key !== false) {
          unset($this->children[$key]);
        }
      }
    
      public function operation(): string {
        $result = "Złożony: (";
        foreach ($this->children as $child) {
          $result .= $child->operation() . ", ";
        }
        $result = rtrim($result, ", "); // Usuwa końcową przecinek i spację
        $result .= ")";
        return $result;
      }
    }
    				
  7. Użycie: Tworzymy kilka liści i komponujemy je w strukturę drzewiastą.
  8. 
    $leaf1 = new Leaf("Liść A");
    $leaf2 = new Leaf("Liść B");
    $leaf3 = new Leaf("Liść C");
    
    $composite1 = new Composite();
    $composite1->add($leaf1);
    $composite1->add($leaf2);
    
    $composite2 = new Composite();
    $composite2->add($leaf3);
    $composite2->add($composite1);
    
    echo $composite2->operation(); // Wyświetli: Złożony: (Liść C, Złożony: (Liść A, Liść B))
    				

Ten przykład pokazuje podstawowe zastosowanie wzorca Composite. Zachęcamy do dalszego zgłębiania tematu i eksperymentowania z bardziej złożonymi strukturami.

Dodaj komentarz 0

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