Maison >développement back-end >tutoriel php >Modèles de conception PHP : introduction au modèle PHP Factory (avec code)
Le contenu de cet article concerne les modèles de conception PHP : une introduction au modèle d'usine PHP (avec code). Les amis dans le besoin peuvent s'y référer.
Le modèle d'usine est une méthode qui masque les détails d'instanciation d'une classe et utilise la même méthode d'instanciation pour une série de classes, ce qui peut facilement étendre la manière de créer des objets pour plus de classes implémentant la même interface.
Des exemples de scénarios d'application incluent :
1) Paiement en ligne
Il existe de nombreuses méthodes de paiement, telles que le paiement WeChat, le paiement Alipay, le paiement UnionPay, etc. Le mode de paiement correspondant est adopté en fonction du choix de l'utilisateur 2 ) Statistiques de visites
Dans un projet avec un métier plus complexe, les utilisateurs accèdent à différents objets, comme l'accès aux articles, l'accès aux auteurs, l'accès aux répertoires d'articles, etc. C'est le même enregistrement d'accès, mais les informations enregistrées sont différentes
Concevez d'abord une interface basée sur le même comportement de plusieurs objets, puis laissez ces classes implémenter cette interface, puis créez une usine d'instanciation, qui peut être instanciée selon différents paramètres en usine Différents types.
/* * 形状接口 */interface Shape{ public function area();}/* * 长方形类,实现了形状接口 */class Rectangle implements Shape{ private $long; private $width; function __construct($long,$width) { $this->long = $long; $this->width = $width; } /* * 实现面积方法 */ public function area() { // TODO: Implement area() method. return $this->long * $this->width; } }/* * 正方形类,实现了形状接口 */class Square implements Shape{ private $width; function __construct($width) { $this->width = $width; } /* * 实现面积方法 */ public function area() { // TODO: Implement area() method. return pow($this->width,2); } }/* * 圆形类,实现了形状接口 */class Circle implements Shape{ private $radiu; function __construct($radiu) { $this->radiu = $radiu; } /* * 实现面积方法 */ public function area() { // TODO: Implement area() method. return pi()*pow($this->radiu,2); } }class ShapeFactory{ /* * 获取实例化的形状对象 * ...$args 表示接受不限个数的参数 */ public function getShpae(...$args) { /* * 第一个参数为形状名,后面的参数为形状的尺寸 */ switch($args[0]) { case 'Rectangle': return new Rectangle($args[1],$args[2]); break; case 'Square': return new Square($args[1]); break; case 'Circle': return new Circle($args[1]); break; } return null; } }$factory = new ShapeFactory();$shape = $factory->getShpae('Rectangle',2,3);$area[] = $shape->area();$shape = $factory->getShpae('Square',2);$area[] = $shape->area();$shape = $factory->getShpae('Circle',2);$area[] = $shape->area(); print_r($area);/* Array ( [0] => 6 [1] => 4 [2] => 12.566370614359 ) */Articles connexes recommandés :
Comment obtenir le répertoire de premier niveau des fichiers en php (code pur)
Comment php utilise-t-il la longitude et la latitude pour calculer la distance entre deux points (code pur)
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!