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"; } }
// 创建者抽象类 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(); } }
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!