Eine eingehende Analyse des Besuchermusters in PHP

青灯夜游
Freigeben: 2023-04-10 13:54:02
nach vorne
2045 Leute haben es durchsucht

Im vorherigen Artikel „Was ist das Zustandsmuster in PHP? Lernen Sie es anhand von Beispielen " Wir haben das Zustandsmuster in PHP eingeführt. Der folgende Artikel führt Sie dazu, das Besuchermuster in PHP-Entwurfsmustern zu verstehen.

Eine eingehende Analyse des Besuchermusters in PHP

Besucher, genau wie wenn wir die Häuser anderer Menschen besuchen oder wenn andere zu uns nach Hause kommen, um uns zu besuchen. Jeder von uns ist wie eine Einheit, und jeder, der uns besucht, begrüßt uns einzeln. Schließlich ist unsere chinesische Nation eine Nation, die großen Wert auf Etikette und Gastfreundschaft legt. Visitor ist das komplexeste Muster unter den 23 Designmustern von GoF und es ist auch das Muster, das in verschiedenen Designmuster-Lehrbüchern an letzter Stelle steht. Unabhängig von der Schwierigkeit schauen wir uns zunächst die Definition und Implementierung an.

Gof-Klassendiagramm und Erklärung

GoF-Definition: Stellt eine Operation dar, die auf jedes Element in einer Objektstruktur wirkt. Sie können damit neue Operationen definieren, die auf diese Elemente einwirken, ohne deren Klassen zu ändern. Es kann als ein junges Paar betrachtet werden, das unser Haus besucht!

interface Visitor
{
    public function VisitConcreteElementA(ConcreteElementA $a);
    function VisitConcreteElementB(ConcreteElementB $b);
}

class ConcreteVisitor1 implements Visitor
{
    public function VisitConcreteElementA(ConcreteElementA $a)
    {
        echo get_class($a) . "被" . get_class($this) . "访问", PHP_EOL;
    }
    public function VisitConcreteElementB(ConcreteElementB $b)
    {
        echo get_class($b) . "被" . get_class($this) . "访问", PHP_EOL;
    }
}

class ConcreteVisitor2 implements Visitor
{
    public function VisitConcreteElementA(ConcreteElementA $a)
    {
        echo get_class($a) . "被" . get_class($this) . "访问", PHP_EOL;
    }
    public function VisitConcreteElementB(ConcreteElementB $b)
    {
        echo get_class($b) . "被" . get_class($this) . "访问", PHP_EOL;
    }
}
Nach dem Login kopieren
Elementabstraktion und -implementierung können auch als Entitäten betrachtet werden, auf die zugegriffen werden muss. Natürlich sind es meine Frau und ich.

interface Element
{
    public function Accept(Visitor $v);
}

class ConcreteElementA implements Element
{
    public function Accept(Visitor $v)
    {
        $v->VisitConcreteElementA($this);
    }
    public function OperationA()
    {

    }
}

class ConcreteElementB implements Element
{
    public function Accept(Visitor $v)
    {
        $v->VisitConcreteElementB($this);
    }
    public function OperationB()
    {

    }
}
Nach dem Login kopieren

Dies ist eine Objektstruktur, die zum Speichern von Elemententitäten und zum Durchführen von Zugriffsaufrufen verwendet wird. Alle trafen sich im Wohnzimmer und tauschten Grüße aus. Das ist nur ein Wohnzimmer

class ObjectStructure
{
    private $elements = [];

    public function Attach(Element $element)
    {
        $this->elements[] = $element;
    }

    public function Detach(Element $element)
    {
        $position = 0;
        foreach ($this->elements as $e) {
            if ($e == $element) {
                unset($this->elements[$position]);
                break;
            }
            $position++;
        }
    }

    public function Accept(Visitor $visitor)
    {
        foreach ($this->elements as $e) {
            $e->Accept($visitor);
        }
    }

}
Nach dem Login kopieren
Der Anruf des Kunden ermöglichte es endlich, sich offiziell zu treffen, sich gegenseitig vorzustellen und sich die Hand zu geben. Ein Besuch wurde glücklich abgeschlossen.

Eine eingehende Analyse des Besuchermusters in PHPLassen Sie Besucher das angegebene Element aufrufen. Hierbei ist zu beachten, dass das Verhalten der Besucher beim Aufrufen von Elementen grundsätzlich festgelegt ist und sich selten ändert. Das heißt, die beiden Methoden VisitConcreteElementA() und VisitConcreteElementB(). Das heißt, die Klasse, die die Objektstruktur definiert, ändert sich selten. Wenn jedoch häufig neue Operationen für diese Struktur definiert werden müssen, wird das Besuchermuster verwendet eine Objektstruktur, und wenn Sie vermeiden möchten, dass diese Operationen die Klassen dieser Objekte „verschmutzen“, ist das Besuchermuster geeignet. Das Besuchermuster eignet sich für Situationen, in denen sich die Datenstruktur nicht ändert. Daher ist es ein Modus, den Sie nicht normal verwenden können, sondern nur bei Bedarf. GoF: „Meistens braucht man den Besuchermodus nicht, aber wenn, dann braucht man ihn wirklich.“ Da es nur wenige Situationen gibt, in denen sich die Datenstruktur nicht ändert, gibt es einige Vor- und Nachteile des Besuchermusters: Es ist einfach, neue Operationen hinzuzufügen und irrelevante Operationen zu trennen. Es ist schwierig, neue ConcreteElement-Klassen hinzuzufügen ; Kumulierter Status; Zerstörung der Kapselung

Die Konten unseres Unternehmens enthalten nur zwei Posten (Elemente): Einnahmen und Ausgaben, aber verschiedene Abteilungen (Besucher) geben beim Zugriff unterschiedliche Inhalte an. Wenn ich beispielsweise nachschaue, muss ich nur die monatlichen oder vierteljährlichen Übersichtsdaten überprüfen. Der Finanzdirektor benötigt detaillierte Einnahmen- und Ausgabenaufzeichnungen, und der Buchhalter benötigt bei der Buchhaltung vollständige Angaben. Es ist ersichtlich, dass der Betrieb des Unternehmens wirklich ein sehr breites Wissensspektrum erfordert, nicht nur Managementfähigkeiten, sondern auch Buchhaltungskenntnisse sind ein Muss! !

Vollständiger Code: https://github.com/zhangyue0503/designpatterns-php/blob/master/23.visitor/source/visitor.php

Beispiel

  • Das letzte Musterbeispiel ist zurück zu Our Informationen werden nach oben gesendet. Das Gleiche gilt für mehrere Dienstleister. Als Besucher müssen sie ihre eigenen SMS-Versand- und APP-Push-Schnittstellen nutzen. Zu diesem Zeitpunkt können Sie den Besuchermodus verwenden, um alle Vorgänge dieser Besucher zu bedienen und zu realisieren.
  • Senden von Informationen im Besuchermodus

Vollständiger Quellcode: https://github.com/zhangyue0503/designpatterns-php/blob/master/23.visitor/source/visitor-msg.php

$o = new ObjectStructure();
$o->Attach(new ConcreteElementA());
$o->Attach(new ConcreteElementB());

$v1 = new ConcreteVisitor1();
$v2 = new ConcreteVisitor2();

$o->Accept($v1);
$o->Accept($v2);
Nach dem Login kopieren

Erklärung

Wir gehen davon aus, dass das Senden von Textnachrichten und das Senden von Push-Benachrichtigungen zwei unveränderte Verhaltensweisen sind, das heißt, ihre Datenstrukturen sind stabil und unverändert

Auf diese Weise können wir ServiceVisitor problemlos hinzufügen, wenn wir Baidu Cloud oder When hinzufügen Bei anderen SMS-Anbietern ist es sehr bequem, Besucher hinzuzufügen. Der Besuchermodus eignet sich besser für eine stabile Datenstruktur. Rechnungen enthalten beispielsweise nur Einnahmen und Ausgaben, die Geschlechter der Personen sind nur Männer und Frauen usw.

Originaladresse: https://juejin.cn/post/6844903993240453133

Autor: Hardcore Project Manager

Eine eingehende Analyse des Besuchermusters in PHP

Empfohlenes Lernen : „
PHP-Video-Tutorial“

Das obige ist der detaillierte Inhalt vonEine eingehende Analyse des Besuchermusters in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:juejin.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!