Maison >développement back-end >tutoriel php >Une brève discussion sur le modèle de méthode d'usine en PHP
Cet article vous présente le modèle de méthode d'usine 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.
Comme mentionné la dernière fois, l'usine simple n'appartient pas aux vingt-trois modèles de conception de GoF. Cette fois, voici le vrai gars, la célèbre usine . Le Mode Méthode vient au rapport !
Recommandations associées : "Une brève discussion du modèle d'usine simple en PHP"
Par rapport à la fabrique simple, le point central du modèle de méthode de fabrique est de reporter la mise en œuvre aux sous-classes. Comment le comprendre ? Nous pouvons utiliser la fabrique simple de la dernière fois comme classe parent, puis faire en sorte qu'un certain nombre de sous-classes en héritent. La méthode createProduct() devient également une méthode abstraite dans la classe parent. Ensuite, toutes les sous-classes implémentent cette méthode. Il n'est pas nécessaire d'utiliser switch pour juger. La sous-classe peut renvoyer directement un objet instancié.
Définition GoF : définissez une interface pour créer des objets et laissez les sous-classes décider quelle classe instancier. La méthode Factory diffère l’instanciation d’une classe à ses sous-classes.
Diagramme de classes GoF :
Implémentation du code
Le premier est l'interface liée au produit et la classe d'implémentation, similaire à celle d'une simple usine :// 商品接口 interface Product{ function show() : void; } // 商品实现类A class ConcreteProductA implements Product{ public function show() : void{ echo "I'm A.\n"; } }Le Vient ensuite la classe abstraite et d'implémentation du créateur :
// 创建者抽象类 abstract class Creator{ // 抽象工厂方法 abstract protected function FactoryMethod() : Product; // 操作方法 public function AnOperation() : Product{ return $this->FactoryMethod(); } } // 创建者实现类A class ConcreteCreatorA extends Creator{ // 实现操作方法 protected function FactoryMethod() : Product{ return new ConcreteProductA(); } }C'est fondamentalement différent d'une simple usine. Nous avons supprimé le commutateur dégoûtant et avons laissé chaque classe d'implémentation spécifique créer des objets produit. C'est vrai, unique et fermé. Chaque sous-classe de créateur n'est couplée qu'à un seul produit dans la méthode d'usine. Je ne sais pas s'il existe d'autres produits et d'autres usines qui ont coopéré avec des clients dans cette sous-classe.
La même analogie est avec les téléphones portables : je suis un grossiste vendant des téléphones portables (Client, côté entreprise), et j'ai besoin d'un lot de téléphones portables (Produit A), alors je suis allé chercher Foxconn ( Factory Creator) pour m'aider à produire. J'ai expliqué mes besoins à Foxconn et Foxconn a accepté de laisser mon usine de Hengyang (ConcreteCreatorA) s'en occuper. Il n'est pas nécessaire d'aller à l'usine principale. Votre petite commande n'est qu'un gaspillage. Puis, au bout d'un moment, j'ai eu besoin d'un autre modèle de téléphone mobile (produit B) et Foxconn l'a examiné et a demandé à Zhengzhou Foxconn (Concrete Creator B) de m'aider à le produire. Quoi qu'il en soit, ils m'ont toujours donné le téléphone portable correspondant. De plus, l'usine de Zhengzhou ne sait pas ce que l'usine de Hengyang a produit ni si elle a coopéré avec moi. Seuls moi et l'usine principale savons tout cela.
Code complet : modèle de méthode Factory https://github.com/zhangyue0503/designpatterns-php/blob/master/02.factory/source/factory. php
Diagramme des classes d'envoi de SMS
Implémentation du 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; } } abstract class MessageFactory{ abstract protected function factoryMethod(); public function getMessage(){ return $this->factoryMethod(); } } class AliYunFactory extends MessageFactory{ protected function factoryMethod(){ return new AliYunMessage(); } } class BaiduYunFactory extends MessageFactory{ protected function factoryMethod(){ return new BaiduYunMessage(); } } class JiguangFactory extends MessageFactory{ protected function factoryMethod(){ return new JiguangMessage(); } } // 当前业务需要使用百度云 $factory = new BaiduYunFactory(); $message = $factory->getMessage(); echo $message->send('您有新的短消息,请查收');
Terminé Code source : méthode d'usine d'envoi de SMShttps://github.com/zhangyue0503/designpatterns-php/blob/master/02.factory/source/factory-message.php
Explication
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!