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

Eine eingehende Analyse des Builder-Musters in PHP

青灯夜游
青灯夜游nach vorne
2021-07-19 19:51:232601Durchsuche

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;
        }
    }
}

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;
    }
}
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();
    }
}
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();

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!

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