Wzorce projektowe – Visitor

Założenie: Zrozumieć i zaimplementować wzorzec projektowy Visitor w PHP, aby dodawać nowe operacje do istniejącej hierarchii klas bez konieczności modyfikowania tych klas.

Krok po kroku:

  1. Definicja interfejsu Visitor: Definiujemy interfejs, który będzie zawierał metody dla każdej operacji, którą chcemy wykonywać na elementach naszej hierarchii.
  2. 
    interface Visitor {
        public function visitElementA(ElementA $element);
        public function visitElementB(ElementB $element);
    }
    				

    Ten kod definiuje interfejs Visitor z metodami visitElementA i visitElementB. Każda metoda przyjmuje jako argument obiekt konkretnego typu elementu.

  3. Definicja klas elementów (ElementA, ElementB): Tworzymy klasy reprezentujące elementy, na których będą wykonywane operacje. Każda klasa implementuje metodę `accept`, która przyjmuje obiekt interfejsu Visitor.
  4. 
    class ElementA {
        public function accept(Visitor $visitor) {
            $visitor->visitElementA($this);
        }
    }
    
    class ElementB {
        public function accept(Visitor $visitor) {
            $visitor->visitElementB($this);
        }
    }
    				

    Metoda accept przekazuje obiekt klasy do odpowiedniej metody w obiekcie Visitor.

  5. Implementacja konkretnych Visitorów: Tworzymy klasy implementujące interfejs Visitor, każda dla innej operacji.
  6. 
    class ConcreteVisitorA implements Visitor {
        public function visitElementA(ElementA $element) {
            echo "Operacja A na elemencie A\n";
        }
        public function visitElementB(ElementB $element) {
            echo "Operacja A na elemencie B\n";
        }
    }
    
    class ConcreteVisitorB implements Visitor {
        public function visitElementA(ElementA $element) {
            echo "Operacja B na elemencie A\n";
        }
        public function visitElementB(ElementB $element) {
            echo "Operacja B na elemencie B\n";
        }
    }
    				

    Klasy ConcreteVisitorA i ConcreteVisitorB implementują interfejs Visitor i definiują konkretne operacje.

  7. Użycie Visitora: Tworzymy obiekty elementów i visitora, a następnie wywołujemy metodę `accept`.
  8. 
    $elementA = new ElementA();
    $elementB = new ElementB();
    $visitorA = new ConcreteVisitorA();
    $visitorB = new ConcreteVisitorB();
    
    $elementA->accept($visitorA);
    $elementB->accept($visitorA);
    $elementA->accept($visitorB);
    $elementB->accept($visitorB);
    				

    Ten kod demonstruje, jak używać visitora do wykonywania różnych operacji na różnych elementach.

Ten przykład pokazuje podstawy wzorca projektowego Visitor. 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 *