Im vorherigen Artikel „Eine kurze Diskussion des Zwischenmusters in PHP“ haben wir das Zwischenmuster in PHP vorgestellt. Dieser Artikel führt Sie zum Verständnis des Builder-Musters im PHP-Entwurfsmuster.
Der Builder-Modus kann auch als Generatormodus bezeichnet werden. Die ursprüngliche Bedeutung des Wortes Builder umfasst die Bedeutung von Builder, Entwickler und Ersteller. Offensichtlich ist dieser Modus ein weiterer Erstellungsmodus, der zum Erstellen von Objekten verwendet wird. Was sind also seine Eigenschaften? Aus architektonischer Sicht ist der Bau eines Hauses nicht etwas, das sofort gebaut werden kann, sondern Stein für Stein gebaut wird. Ein Haus besteht nicht nur aus Ziegeln und Ziegeln, sondern auch aus verschiedenen Rohren, verschiedenen Drähten usw., und ihre verschiedenen Teile bilden zusammen ein Haus. Man kann sagen, dass das Builder-Muster ein sehr anschaulicher Prozess ist, bei dem ein Objekt (Haus) aus verschiedenen Komponenten zusammengesetzt wird. Das Code implementiert die Produktklasse
rrreeclass Product { private $parts = []; public function Add(String $part): void { $this->parts[] = $part; } public function Show(): void { echo PHP_EOL . '产品创建 ----', PHP_EOL; foreach ($this->parts as $part) { echo $part, PHP_EOL; } } }
Builder-Abstraktion und ihre Implementierung. Verschiedene Entwickler werden immer unterschiedliche Materialmarken verwenden. Hier haben wir zwei verschiedene Entwickler, aber ihr Zweck ist der gleiche, ein Haus (Produkt) zu bauen. interface Builder
{
public function BuildPartA(): void;
public function BuildPartB(): void;
public function GetResult(): Product;
}
class ConcreteBuilder1 implements Builder
{
private $product;
public function __construct()
{
$this->product = new Product();
}
public function BuildPartA(): void
{
$this->product->Add('部件A');
}
public function BuildPartB(): void
{
$this->product->Add('部件B');
}
public function GetResult(): Product
{
return $this->product;
}
}
class ConcreteBuilder2 implements Builder
{
private $product;
public function __construct()
{
$this->product = new Product();
}
public function BuildPartA(): void
{
$this->product->Add('部件X');
}
public function BuildPartB(): void
{
$this->product->Add('部件Y');
}
public function GetResult(): Product
{
return $this->product;
}
}
class Director
{
public function Construct(Builder $builder)
{
$builder->BuildPartA();
$builder->BuildPartB();
}
}
Tatsächlich besteht das Hauptproblem, das durch dieses Modell gelöst werden muss, darin, dass eine Klasse möglicherweise viele Konfigurationen und Attribute hat. Es ist sehr mühsam, diese Dinge durch ein einziges zu konfigurieren. Zeitinstanziierung. Zu diesem Zeitpunkt können Sie erwägen, diese Konfigurationen und Eigenschaften in Teile umzuwandeln, die jederzeit hinzugefügt werden können. Erhalten Sie unterschiedliche Objekte durch unterschiedliche Attributkombinationen.
Der Originaltext des obigen Artikels in GoF lautet: Er ermöglicht es Ihnen, die interne Darstellung eines Produkts zu ändern; er trennt den Konstruktionscode und den Präsentationscode und ermöglicht Ihnen eine detailliertere Kontrolle über den Konstruktionsprozess.Um es einfach auszudrücken: Das Objekt ist zu komplex, wir können es Teil für Teil zusammenbauen!
Wenn Sie sich ein wenig mit der Android-Entwicklung auskennen, sind Sie damit vertraut. Erstellen eines Dialogobjekts AlterDialog.builder
In Laravel verwendet die Datenbankkomponente auch das Builder-Muster. Sie können überprüfen, ob es eines in der DatabaseEloquent gibt und DatabaseQuery-Verzeichnisse im Quellcode Builder.php
Jeder weiß, dass die Montage von Mobiltelefonen ein komplizierter Prozess ist. Daher verfügen wir über entsprechende Zeichnungen (Builder) für verschiedene Mobiltelefonmodelle und übergeben die Zeichnungen und das Zubehör an die Arbeiter (Direktor) am Fließband. Sie werden Zubehör gemäß den Zeichnungen verwenden, um die verschiedenen Modelle von Mobiltelefonen (Produkten) herzustellen, die wir benötigen. Es ist offensichtlich, dass wir alle großartige Bauunternehmer sind und einen Beitrag zu unserer Branche leisten! ! !
Vollständiger Quellcode: https://github.com/zhangyue0503/designpatterns-php/blob/master/16.builder/source/builder-dialog.php
Anleitung$director = new Director(); $b1 = new ConcreteBuilder1(); $b2 = new ConcreteBuilder2(); $director->Construct($b1); $p1 = $b1->getResult(); $p1->Show(); $director->Construct($b2); $p2 = $b2->getResult(); $p2->Show();Nach dem Login kopieren
- Dieses Mal ist unser Produkt etwas kompliziert, mit Titel, Inhalt, Attributen, Schaltflächen usw.
- Der Konstruktionsprozess ist eigentlich der gleiche, aber hier verwenden wir hauptsächlich unterschiedliche Konstruktoren. Auf Dinge außerhalb des normalen Dialogfelds kann geklickt werden, während modale Fenster im Allgemeinen eine Maskenebene haben, was bedeutet, dass der Hintergrund transparent schwarz wird und Dinge außerhalb nicht mehr angeklickt werden können
- Wenn Sie es jedes Mal direkt über die Konstruktionsmethode instanziieren Fensterklasse, es müssen viele Parameter übergeben werden, aber jetzt können wir sie über den Builder kombinieren, sodass das Objekt einen polymorphen Effekt hat und verschiedene Formen und Funktionen darstellen kann
Ursprüngliche Adresse: https: / /juejin.cn/post/6844903981836320781
Autor: Hardcore Project Manager
Empfohlenes Lernen: „PHP-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonEine eingehende Analyse des Builder-Musters in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!