Heim >Backend-Entwicklung >PHP-Tutorial >Eine eingehende Analyse des Kombinationsmusters in PHP
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.
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-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]; } }Blattknoten, 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 ziehenDer 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 definierenKompositionsmuster ermöglichen es Kunden, zusammengesetzte Strukturen und einzelne Objekte konsistent zu verwenden.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-VersandklassendiagrammVollstä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 Wenn ich Benutzer von Forumsabschnitten senden möchte, kann ich Blattknoten verschiedener lokaler Stationen frei hinzufügen, um die Sendeobjekte zu steuern.
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 klarSie können das Senden des gesamten $root2 als Ganzes betrachten, verschiedene Abschnitte und Regionen werden als Teile betrachtet
Ursprüngliche Adresse: https://juejin.cn /post/6844903967407734792
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!