Maison  >  Article  >  développement back-end  >  Une brève discussion sur le modèle de fabrique simple en PHP

Une brève discussion sur le modèle de fabrique simple en PHP

青灯夜游
青灯夜游avant
2021-06-16 17:48:213788parcourir

Cet article vous présente le modèle d'usine simple dans les modèles de conception PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Une brève discussion sur le modèle de fabrique simple en PHP

Commencez par une usine simple. Qu'il s'agisse d'un entretien ou d'une interview par d'autres, lorsqu'on les interroge sur les modèles de conception, la plupart des gens mentionneront le modèle d'usine. Il ne fait aucun doute que plusieurs modèles liés à l’usine sont les plus connus et les plus largement utilisés parmi les modèles de conception. Les modèles de conception du GoF sont également des modèles de création.

Cependant, ceux qui peuvent expliquer clairement Simple Factory, Factory Pattern et Abstract Factory Pattern peuvent vraiment impressionner l'intervieweur. Il y a ici une prémisse selon laquelle vous pouvez vraiment l'expliquer clairement. La plupart des gens, moi y compris, ne peuvent pas l'expliquer clairement avant d'avoir étudié en profondeur les modèles de conception. Qu’il s’agisse d’un entretien ou d’un entretien avec quelqu’un d’autre. Lorsque j’interviewe d’autres personnes, je ne peux donner qu’une ébauche. Quand je suis allé à l’entretien, j’ai juste donné un aperçu général. Après avoir connu de nombreux revers, j'ai eu l'idée de faire des recherches approfondies sur les modèles de conception, c'est pourquoi cette série d'articles a été réalisée. En partant de cette simple usine, étudions à nouveau en profondeur les modèles de conception.

Bien sûr, PHP est utilisé ici.

Explication

L'usine simple, également appelée usine statique, n'appartient pas aux modèles de conception GoF 23. Mais on peut dire que parmi tous les modèles de conception, il est probablement le plus facile à comprendre pour tout le monde, et vous avez peut-être déjà utilisé ce modèle de conception d'innombrables fois dans votre code. Commençons par le segment de code le plus simple.

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

Oui, le point central est le simple code de commutateur au milieu. Nous avons corrigé le type de valeur de retour en tant qu'implémentation de l'interface du produit.

Dans ce code, de nouvelles fonctionnalités PHP sont utilisées, Type de paramètre et Type de valeur de retour

Interface produit Et produit implémentation

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

L'utilisation finale du client est très simple

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

Comme le montre le code ci-dessus, en fait, voici une classe d'usine basée sur la chaîne que nous passons ou autre définitions que vous faites. identifiant pour renvoyer le produit correspondant (objet Product).

Une métaphore plus visuelle : je suis un grossiste (Client, côté entreprise) qui vend des téléphones portables. J'ai besoin d'un lot de téléphones portables (Produit), je suis donc allé chez Foxconn (Usine). pour m'aider à produire. J'ai passé une commande ($type variable) et précisé le modèle, puis Foxconn m'a donné le téléphone du modèle correspondant, puis j'ai continué mon travail. C'était vraiment agréable de coopérer avec Foxconn.

Une manière d'écrire plus standardisée ici pourrait être que tous les produits implémenteront une interface unifiée, et que le client saura alors uniquement comment appeler les méthodes d'interface de manière uniforme. S'il n'est pas standardisé, vous ne pouvez pas utiliser d'interfaces et renvoyer divers objets, à l'instar du mode façade pour une gestion unifiée des façades.

Une brève discussion sur le modèle de fabrique simple en PHP

Adresse du code source : Implémentation du diagramme de classes de base d'usine simple

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

Exemple

Scénario : module de fonction d'envoi de SMS. Nous utilisons désormais les services SMS de trois commerçants, à savoir Alibaba Cloud, Diexin et Jiguang. Différents expéditeurs de SMS peuvent être utilisés dans différentes entreprises. L'utilisation de Simple Factory peut facilement répondre à cette exigence.

Diagramme de classes :

Une brève discussion sur le modèle de fabrique simple en 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;);

Code source adresse : Instance d'usine simple - Usine d'envoi de SMS

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

Description

  • Doit utiliser static lors de la création d'un message ? Pas nécessairement, cela dépend de la situation de votre entreprise. Toutes les statistiques qui doivent être résidentes, et celles qui sont instanciées à la demande peuvent être nouvelles puis normales -> Pour appeler les trois sous-classes de messages
  • , devez-vous le faire. implémenter l'interface ? Pas nécessairement. PHP lui-même est un langage faiblement typé et n'a pas besoin d'être appliqué. Cependant, l'utilisation d'interfaces est plus conforme aux spécifications orientées objet (veuillez vous référer à Polymorphisme). est en fait une sorte de polymorphisme. Expression et application
  • Lorsque vous devez ajouter un canal pour envoyer des messages, ajoutez une nouvelle classe pour hériter de l'interface Message, implémentez la méthode send() et modifiez le commutateur dans le fichier. Méthode createFactory() dans MessageFactory()
  • Réflexion Quel principe orienté objet la modification ci-dessus viole-t-elle ? (Astuce : Ouvrir XX)
  • Le type de valeur de retour n'est pas utilisé dans l'instance ? Il s'agit également d'une nouvelle syntaxe. Pour des raisons de compatibilité avec les anciennes versions, il n'est pas nécessaire de l'écrire. Cependant, si la pile technologique de l'entreprise a été mise à niveau vers 7 ou plus, il est recommandé d'écrire le code de cette classe d'architecture de modèle de conception. selon les nouvelles fonctionnalités expliquées ci-dessus. , c'est-à-dire qu'avec le type de paramètre et le type de valeur de retour, il est plus conforme à la spécification et plus facile à comprendre
  • Que dois-je faire si $type est transmis de manière incorrecte et. renvoie NULL dans l'instance ? Cher client, veuillez bien gérer ce problème lors de l'écriture du code. Le retour d'une capture par défaut ou de niveau supérieur est une bonne solution. Bien sûr, il est préférable que le client fasse un jugement à l'avance. S'il n'y a pas de problème, rendez-vous à l'usine.

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer