Der Besuchermodus ist ein Verhaltensdesignmuster, das die Datenstruktur von den auf die Datenstruktur wirkenden Vorgänge trennt, sodass eine neue Betriebslogik definiert werden kann, ohne die Datenstruktur zu ändern. In der pHP-objektorientierten Entwicklung eignet sich dieses Muster besonders zum Umgang mit komplexen Datenobjektsammlungen und unterschiedlichen Betriebsbedürfnissen.
Der Besuchermodus enthält normalerweise die folgenden Rollen:
Die Kernidee ist, dass Elementklassen die Verarbeitung an Besucher delegieren und Besucher unterschiedliche Logik nach verschiedenen Elementtypen implementieren, wodurch die Trennung der Verantwortlichkeiten erreicht wird.
Das folgende Beispiel zeigt, wie der Gesamtpreis von Artikeln in einem Einkaufswagen über den Besuchermodus berechnet wird.
class Structure
{
private $elements;
public function __construct()
{
$this->elements = [];
}
public function addElement(Element $element)
{
$this->elements[] = $element;
}
public function accept(Visitor $visitor)
{
foreach ($this->elements as $element) {
$element->accept($visitor);
}
}
}
class Element
{
private $price;
public function __construct($price)
{
$this->price = $price;
}
public function accept(Visitor $visitor)
{
$visitor->visit($this);
}
public function getPrice()
{
return $this->price;
}
}
class Visitor
{
private $total;
public function __construct()
{
$this->total = 0;
}
public function visit(Element $element)
{
$this->total += $element->getPrice();
}
public function getTotal()
{
return $this->total;
}
}
class ConcreteElement extends Element
{
// Spezifische Produktattribute oder Verhaltensweisen können hier erweitert werden
}
class ConcreteVisitor extends Visitor
{
// Kann andere komplexe statistische Logik implementieren
}
Im Besuchermodus kümmert sich die Einkaufswagen -Strukturklasse (Struktur) nicht mehr darum, wie sie mit der Logik der Produktpreisstatistik umgehen soll, sondern delegiert diesen Teil der Logik an die Besucherklasse (Besucher). Diese Methode erzielt ein hohes Maß an logischer Entkopplung, sodass in Zukunft neue statistische Funktionen oder Verarbeitungsmethoden hinzugefügt werden können, ohne vorhandene Strukturcodes zu ändern.
Der Besuchermodus hat einen wichtigen praktischen Wert in der Objektoriententwicklung von PHP, insbesondere in Szenarien, in denen mehrere irrelevante Operationen erforderlich sind, um komplexe Objektsammlungen durchzuführen. Durch die rationale Anwendung dieses Modells kann die architektonische Qualität und Entwicklungseffizienz des Projekts effektiv verbessert werden.