Heim  >  Artikel  >  Backend-Entwicklung  >  Eine eingehende Analyse des Kombinationsmusters in PHP

Eine eingehende Analyse des Kombinationsmusters in PHP

青灯夜游
青灯夜游nach vorne
2021-07-15 19:30:512752Durchsuche

Im vorherigen Artikel „Verstehen Sie das Flyweight-Muster in PHP in einem Artikel“ haben wir das Flyweight-Muster in PHP vorgestellt. Dieser Artikel führt Sie zum Verständnis des Kombinationsmusters in PHP-Designmustern.

Eine eingehende Analyse des Kombinationsmusters in PHP

Flaches Management ist in Internetunternehmen beliebt, das heißt, die Führungsebene sollte weniger als oder nicht mehr als drei Ebenen betragen. Als Low-Level-Programmierer beträgt der Unterschied zwischen Ihrem CEO und Ihrem Rang innerhalb von drei Ebenen. Viele traditionelle Unternehmen haben jedoch sehr tiefe hierarchische Beziehungen. Aus Sicht der Datenstruktur ähnelt diese nach Funktionen gruppierte Organisationsstruktur einem Baum. Die Rolle des Kombinationsmodells, das wir heute vorstellen, ist dem Modell auf der Ebene der Unternehmensorganisationsstruktur sehr ähnlich.

Gof-Klassendiagramm und Erklärung

GoF-Definition: Objekte werden in einer Baumstruktur zusammengefasst, um eine „Teil-Ganze“-Hierarchie darzustellen. Mit Composite können Benutzer einzelne Objekte und zusammengesetzte Objekte konsistent verwenden.

GoF-Klassendiagramm soll die übergeordnete Klasse aller untergeordneten Knoten sein.

abstract class Component
{
    protected $name;

    public function __construct($name){
        $this->name = $name;
    }
    
    abstract public function Operation(int $depth);

    abstract public function Add(Component $component);

    abstract public function Remove(Component $component);
}

Spezifische Knotenimplementierungsklasse, speichert Verweise auf untergeordnete Knoten und definiert das tatsächliche Knotenverhalten.

class Composite extends Component
{
    private $componentList;

    public function Operation($depth)
    {
        echo str_repeat('-', $depth) . $this->name . PHP_EOL;
        foreach ($this->componentList as $component) {
            $component->Operation($depth + 2);
        }
    }

    public function Add(Component $component)
    {
        $this->componentList[] = $component;
    }

    public function Remove(Component $component)
    {
        $position = 0;
        foreach ($this->componentList as $child) {
            ++$position;
            if ($child == $component) {
                array_splice($this->componentList, ($position), 1);
            }
        }
    }

    public function GetChild(int $i)
    {
        return $this->componentList[$i];
    }
}
Eine eingehende Analyse des Kombinationsmusters in PHPBlattknoten, der letzte Knoten ohne untergeordnete Knoten.

Aus Sicht des Codes handelt es sich vollständig um die Implementierung eines Baums.

Alle untergeordneten Knoten und Blattknoten können Daten verarbeiten, aber der Blattknoten ist der Endpunkt.

Sie hoffen, dass Benutzer den Unterschied zwischen kombinierten Knoten ignorieren können Objekte und einzelne Objekte und vereinheitlichen Wenn Sie alle Objekte in der Kombinationsstruktur effektiv nutzen, sollten Sie die Verwendung des Kombinationsmodus in Betracht ziehen

Der Benutzer muss sich nicht darum kümmern, ob er einen Blattknoten oder eine Kombinationskomponente verarbeitet, und es besteht auch keine Notwendigkeit Schreiben Sie einige Aussagen zur Auswahlbeurteilung, um die Kombination zu definieren

Kompositionsmuster ermöglichen es Kunden, zusammengesetzte Strukturen und einzelne Objekte konsistent zu verwenden.
  • Folgen Sie dem Beispiel am Anfang des Artikels: Wenn in unserer Organisationsstruktur eine Aufgabe die unterste Person erreicht, es wird mehrere Ebenen durchlaufen. Ich bevorzuge immer noch die traditionelle Unternehmensführungsmethode. Normalerweise entspricht ein Direktor mehreren Vorgesetzten, ein Vorgesetzter entspricht mehreren Managern, ein Manager entspricht mehreren Teamleitern und ein Teamleiter entspricht mehreren Mitarbeitern. Wenn eine Mitteilung herausgegeben wird, müssen die Mitarbeiter auf jeder Ebene reagieren und die Mitteilung weiterhin an die untergeordneten Mitarbeiter verteilen, während sie gleichzeitig Feedback von den Untergebenen einholen. Auf diese Weise haben wir die Anwendung des Kombinationsmodells in der Praxis unwissentlich abgeschlossen. Plötzlich fühle ich mich großartig und ich habe das Gefühl, dass mein Leben seinen Höhepunkt erreicht hat! !
  • Vollständiger Code: https://github.com/zhangyue0503/designpatterns-php/blob/master/14.composite/source/composite.php
  • Beispiel

SMS-Textnachrichten, wir können diese Funktion verwenden und immer wieder gebraucht. Dieses Mal ist keine Ausnahme. Diesmal besteht die Funktion unseres Website-Backends darin, Textnachrichten an Benutzer aus verschiedenen Umspannwerken und aus verschiedenen Quellen zu senden. Hier konzentrieren wir uns immer noch nur auf das Versenden von Textnachrichten. Wir hoffen, Ihnen Benutzer mit unterschiedlichen Kanalrollen, aber einheitlichem Verhalten zu bieten. Eine solche Funktion scheint nicht schwierig zu sein, oder?

SMS-Versandklassendiagramm

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

class Leaf extends Component
{
    public function Add(Component $c)
    {
        echo 'Cannot add to a leaf' . PHP_EOL;
    }
    public function Remove(Component $c)
    {
        echo 'Cannot remove from a leaf' . PHP_EOL;
    }
    public function Operation(int $depth)
    {
        echo str_repeat('-', $depth) . $this->name . PHP_EOL;
    }
}
Erklärung

Eine eingehende Analyse des Kombinationsmusters in PHP

Wenn ich Benutzer von Forumsabschnitten senden möchte, kann ich Blattknoten verschiedener lokaler Stationen frei hinzufügen, um die Sendeobjekte zu steuern.

Sie können das Senden des gesamten $root2 als Ganzes betrachten, verschiedene Abschnitte und Regionen werden als Teile betrachtet

Diese Kombination kann sich nach unten bis zum Ende des Deep-Blatt-Knotens erstrecken. Natürlich wird dieser Grad von Ihnen selbst gesteuert, das ist ganz klar

Ursprüngliche Adresse: https://juejin.cn /post/6844903967407734792
  • Autor: Hardcore Project Manager
  • Empfohlenes Lernen: „
  • PHP-Video-Tutorial

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

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen