Eine eingehende Analyse des Builder-Musters in PHP

青灯夜游
Freigeben: 2023-04-10 11:36:01
nach vorne
2438 Leute haben es durchsucht

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.

Eine eingehende Analyse des Builder-Musters in PHP

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

rrree

Sie können es sich als das Haus vorstellen, das wir bauen möchten. Das Haus hat zu diesem Zeitpunkt keinen Inhalt, wir müssen Ziegel und Fliesen hinzufügen.

class 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; } } }
Nach dem Login kopieren

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; } }
Nach dem Login kopieren
Constructor, wird verwendet, um den Builder für die Produktion aufzurufen. Genau, es ist unser Ingenieursteam. Es wählt Materialien und Builds aus. Dasselbe Ingenieurteam kann unterschiedliche Aufträge annehmen, baut aber nur Häuser. Nur die Materialien und das Aussehen dieses Hauses sind unterschiedlich, aber die allgemeine Handwerkskunst ist immer noch dieselbe.
class Director { public function Construct(Builder $builder) { $builder->BuildPartA(); $builder->BuildPartB(); } }
Nach dem Login kopieren
Werfen wir zum Schluss einen Blick auf unsere Implementierung? Ist es ganz einfach, das Engineering-Team vorzubereiten, verschiedene Builder vorzubereiten und es dann dem Engineering-Team zur Produktion zu übergeben? !

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.

Eine eingehende Analyse des Builder-Musters in PHPUm 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 Code: https://github.com/zhangyue0503/designpatterns-php/blob/master/16.builder/source/builder.php
  • Beispiel
  • Wie bereits erwähnt, gibt es viele Dialogdialogfelder in Android Sie werden alle mithilfe des Builder-Modells implementiert. Als Eigentümer einer Mobiltelefonfabrik sind auch angepasste Android-Systeme ein sehr wichtiger Bestandteil. Genau wie beim X Mi haben wir mit MIUI begonnen und zuerst den Softwaremarkt erobert, sodass jeder das Gefühl hatte, dass dieses System sehr einfach zu bedienen ist, und dann mit der Entwicklung von Mobiltelefonen begonnen. Dies zeigt, dass Software und Hardware tatsächlich die beiden wichtigsten Komponenten moderner Mobiltelefone sind und keines davon ohne sie überleben kann. Dieses Mal werden wir den Builder-Modus verwenden, um einfach eine Reihe von Dialogkomponenten zu implementieren!
  • Dialogklassendiagramm

Vollständiger Quellcode: https://github.com/zhangyue0503/designpatterns-php/blob/master/16.builder/source/builder-dialog.php

$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
Anleitung

  • 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!

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
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!