Maison > Article > développement back-end > Une brève discussion sur le modèle de fabrique simple en PHP
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.
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.
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.
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
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 :
Code :
<?php interface Message { public function send(string $msg); } class AliYunMessage implements Message{ public function send(string $msg){ // 调用接口,发送短信 // xxxxx return '阿里云短信(原阿里大鱼)发送成功!短信内容:' . $msg; } } class BaiduYunMessage implements Message{ public function send(string $msg){ // 调用接口,发送短信 // xxxxx return '百度SMS短信发送成功!短信内容:' . $msg; } } class JiguangMessage implements Message{ public function send(string $msg){ // 调用接口,发送短信 // xxxxx return '极光短信发送成功!短信内容:' . $msg; } } Class MessageFactory { public static function createFactory($type){ switch($type){ case 'Ali': return new AliYunMessage(); case 'BD': return new BaiduYunMessage(); case 'JG': return new JiguangMessage(); default: return null; } } } // 当前业务需要使用极光 $message = MessageFactory::createMessage('Ali'); echo $message->send('您有新的短消息,请查收');
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
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!