Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Diskussion über das einfache Factory-Muster in PHP

Eine kurze Diskussion über das einfache Factory-Muster in PHP

青灯夜游
青灯夜游nach vorne
2021-06-16 17:48:213722Durchsuche

Dieser Artikel führt Sie durch das einfache Factory-Muster in PHP-Designmustern. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Eine kurze Diskussion über das einfache Factory-Muster in PHP

Beginnen wir mit einer einfachen Fabrik. Ob es sich um ein Interview oder ein Interview mit anderen handelt: Wenn man nach Designmustern fragt, erwähnen die meisten Leute das Fabrikmuster. Es besteht kein Zweifel, dass einige fabrikbezogene Muster die bekanntesten und am weitesten verbreiteten Designmuster sind. GoF-Entwurfsmuster sind auch Schöpfungsmuster.

Wer jedoch diese drei Modi klar erklären kann: Einfache Fabrik, Fabrikmuster und Abstraktes Fabrikmuster, kann den Interviewer wirklich beeindrucken. Hier gilt die Voraussetzung, dass man es wirklich klar erklären kann. Die meisten Menschen, mich eingeschlossen, können es nicht klar erklären, bevor sie sich eingehend mit Designmustern befassen. Egal, ob ich zu einem Vorstellungsgespräch gehe oder jemand anderen interviewe. Wenn ich andere interviewe, kann ich nur einen allgemeinen Überblick geben. Als ich zum Vorstellungsgespräch ging, gab ich nur einen allgemeinen Überblick. Nachdem ich viele Rückschläge erlebt hatte, kam ich auf die Idee, Designmuster eingehend zu erforschen, und so entstand diese Artikelserie. Beginnen wir mit dieser einfachen Fabrik und studieren wir die Designmuster noch einmal eingehend.

Natürlich kommt hier PHP zum Einsatz.

Erklärung

Einfache Fabrik, auch statische Fabrik genannt, gehört nicht zu den 23 GoF-Entwurfsmustern. Man kann jedoch sagen, dass es von allen Entwurfsmustern wahrscheinlich für jeden am einfachsten zu verstehen ist und Sie dieses Entwurfsmuster möglicherweise bereits unzählige Male in Ihrem Code verwendet haben. Beginnen wir mit dem einfachsten Codesegment.

// Factory
class Factory
{
    public static function createProduct(string $type) : Product
    {
        $product = null;
        switch ($type) {
            case 'A':
                $product = new ProductA();
                break;
            case 'B':
                $product = new ProductB();
                break;
        }
        return $product;
    }
}

Ja, der Kernpunkt ist der einfache Schaltercode in der Mitte. Wir haben den Rückgabewerttyp als Implementierung der Produktschnittstelle festgelegt.

In diesem Code werden neue PHP-Funktionen verwendet, Parametertyp und Rückgabewerttyp

Produktschnittstelle und Produktimplementierung

// Products
interface Product
{
    public function show();
}

class ProductA implements Product
{
    public function show()
    {
        echo 'Show ProductA';
    }
}

class ProductB implements Product
{
    public function show()
    {
        echo 'Show ProductB';
    }
}

Am Ende ist die Verwendung des Clients sehr einfach

// Client
$productA = Factory::createProduct('A');
$productB = Factory::createProduct('B');
$productA->show();
$productB->show();

Von Der obige Code Wie Sie sehen können, handelt es sich tatsächlich um eine Factory-Klasse, die das entsprechende Produkt (Produktobjekt) basierend auf der von uns übergebenen Zeichenfolge oder anderen von Ihnen definierten Bezeichnern zurückgibt.

Eine eher visuelle Metapher: Ich bin ein Großhändler (Kunde, Geschäftsseite), der Mobiltelefone verkauft. Ich benötige eine Menge Mobiltelefone (Produkt), also habe ich Foxconn (Fabrik) gebeten, mir bei der Produktion zu helfen. Ich habe eine Bestellung aufgegeben ($type-Variable) und das Modell angegeben, und dann hat Foxconn mir das Telefon des entsprechenden Modells gegeben, und dann habe ich meine Arbeit fortgesetzt. Es war wirklich angenehm, mit Foxconn zusammenzuarbeiten.

Eine standardisiertere Schreibweise könnte darin bestehen, dass alle Produkte eine einheitliche Schnittstelle implementieren und der Client dann nur weiß, wie er die Schnittstellenmethoden einheitlich aufruft. Wenn es nicht standardisiert ist, können Sie keine Schnittstellen verwenden und verschiedene Objekte zurückgeben, ähnlich dem Fassadenmodus für eine einheitliche Fassadenverwaltung.

Eine kurze Diskussion über das einfache Factory-Muster in PHP

Quellcode-Adresse: Einfache Factory-Basisklassendiagramm-Implementierung

https://github.com/zhangyue0503/designpatterns-php/blob/master/01.simple-factory/source/simple-factory.php

Beispiel

Szenario: SMS-Versand-Funktionsmodul. Mittlerweile nutzen wir die SMS-Dienste von drei Händlern, nämlich Alibaba Cloud, Diexin und Jiguang. Mit Simple Factory können verschiedene SMS-Versender diese Anforderung problemlos erfüllen.

Klassendiagramm:

Eine kurze Diskussion über das einfache Factory-Muster in PHP

Code:

<?php

interface Message {
    public function send(string $msg);
}

class AliYunMessage implements Message{
    public function send(string $msg){
        // 调用接口,发送短信
        // xxxxx
        return &#39;阿里云短信(原阿里大鱼)发送成功!短信内容:&#39; . $msg;
    }
}

class BaiduYunMessage implements Message{
    public function send(string $msg){
        // 调用接口,发送短信
        // xxxxx
        return &#39;百度SMS短信发送成功!短信内容:&#39; . $msg;
    }
}

class JiguangMessage implements Message{
    public function send(string $msg){
        // 调用接口,发送短信
        // xxxxx
        return &#39;极光短信发送成功!短信内容:&#39; . $msg;
    }
}

Class MessageFactory {
    public static function createFactory($type){
        switch($type){
            case &#39;Ali&#39;:
                return new AliYunMessage();
            case &#39;BD&#39;:
                return new BaiduYunMessage();
            case &#39;JG&#39;:
                return new JiguangMessage();
            default:
                return null;
        }
    }
}

// 当前业务需要使用极光
$message = MessageFactory::createMessage(&#39;Ali&#39;);
echo $message->send(&#39;您有新的短消息,请查收&#39;);

Quellcodeadresse: Einfache Fabrikinstanz – SMS-Sendefabrik

https://github.com/zhangyue0503/designpatterns-php/blob/master / 01.simple-factory/source/simple-factory-message.php

Beschreibung

  • Muss beim Erstellen einer Nachricht statisch verwendet werden? Nicht unbedingt, es hängt von Ihrer Geschäftssituation ab. Alle Statiken, die resident sein müssen, und diejenigen, die bei Bedarf instanziiert werden, können neu und dann normal sein -> Müssen Sie die Schnittstelle implementieren, um die drei Nachrichtenunterklassen aufzurufen? Nicht unbedingt. PHP selbst ist eine schwach typisierte Sprache und muss nicht erzwungen werden. Die Verwendung von Schnittstellen entspricht jedoch eher den objektorientierten Spezifikationen (siehe
  • Die einfache Fabrik selbst ist tatsächlich ein Ausdruck). und Anwendung von Polymorphismus
  • Wenn Sie einen Kanal zum Senden von Nachrichten hinzufügen müssen, fügen Sie eine neue Klasse hinzu, um die Message-Schnittstelle zu erben, implementieren Sie die send()-Methode und ändern Sie den Schalter in der createFactory()-Methode in MessageFactory()
  • Überlegen Sie, gegen welche objektorientierten Prinzipien die oben genannten Änderungen verstoßen? (Tipp: Öffnen Sie XX)
  • Der Rückgabewerttyp wird in der Instanz nicht verwendet? Dies ist auch eine neue Syntax, es ist nicht erforderlich, sie zu schreiben. Wenn der Technologie-Stack des Unternehmens jedoch auf 7 oder höher aktualisiert wurde, wird empfohlen, den Code dieser Designmuster-Architekturklasse zu verwenden geschrieben gemäß den oben erläuterten neuen Funktionen, d. h. mit Parametertypen und Rückgabewerttypen, ist es konsistenter mit der Spezifikation und einfacher zu verstehen. Was soll ich tun, wenn $type falsch übergeben wird und in der Instanz NULL zurückgibt? Sehr geehrte Damen und Herren, bitte gehen Sie beim eigentlichen Schreiben von Code gut mit diesem Problem um. Natürlich ist es am besten, wenn der Kunde im Voraus eine Entscheidung trifft Fabrik
  • Empfohlenes Lernen: „
  • PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über das einfache Factory-Muster 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