Maison >développement back-end >tutoriel php >Développement orienté objet PHP - modèle d'usine

Développement orienté objet PHP - modèle d'usine

黄舟
黄舟original
2016-12-29 11:09:531744parcourir

En termes simples, le modèle d'usine fait référence à la création d'une famille de classes pour certaines classes avec la même structure et à la fourniture d'une classe d'entrée unique pour cette famille. Veuillez faire attention à la description de « même structure ». Elle fait référence au fait qu'un certain type d'objet a certaines caractéristiques qui nous permettent de le distinguer des autres objets. Par exemple, il y a une question d'association et nous associons la même chose à travers deux. mots. "Quatre roues, brûlant de l'essence." Je pense qu’on peut immédiatement penser aux voitures, camionnettes, taxis et autres voitures, mais pas aux motos. Les « quatre roues » et « l'essence brûlante » sont ici les mêmes caractéristiques des voitures, des fourgonnettes et des taxis. Nous les utilisons pour classer les voitures, les fourgonnettes et les taxis dans le groupe « voiture ».

Retour à php, nous allons illustrer ici le modèle d'usine avec des exemples.

Il existe maintenant une usine automobile qui produit des voitures et des bus. Les voitures et les bus sont composés de moteurs, de carrosseries et de roues.

Analyse :

1. Il existe des normes communes pour la production de diverses voitures, et des moteurs, des carrosseries et des roues doivent être produits. Par conséquent, nous pouvons développer une classe d'interface pour la production de voitures. . Tous les types de voitures doivent suivre les normes de cette classe d'interface.

2. Le monde extérieur doit permettre l'accès depuis l'usine à la production de voitures et de bus.

//生产汽车的标准  
    interface carNorms{  
        function engine();//引擎  
        function body();//车身  
        function whell();//轮子  
    }  
      
    //生产小汽车  
    class car implements carNorms{  
          
        public function engine(){  
            return '汽车引擎';  
        }  
          
        public function body(){  
            return '汽车车身';  
        }  
          
        public function whell(){  
            return '汽车轮子';  
        }  
          
    }  
      
    //生产巴士车  
    class bus implements carNorms{  
          
        public function engine(){  
            return '巴士引擎';  
        }  
          
        public function body(){  
            return '巴士车身';  
        }  
          
        public function whell(){  
            return '巴士轮子';  
        }  
          
    }  
      
    //汽车工厂  
    class carFactory{  
          
        static public function carInstance($type){  
            $instance='';  
            switch($type){  
                case 'car':  
                    $instance=new car();  
                    break;  
                case 'bus':  
                    $instance=new bus();  
                    break;  
                default:  
                    throw new Exception('本工厂无法生产这种类型的车');  
            }  
            if(!$instance instanceof carNorms){  
                throw new Exception('这种车不符合生产标准');  
            }  
            return $instance;  
        }  
          
    }  
      
    $createCar=carFactory::carInstance('car');  
    $car['engine']=$createCar->engine();  
    $car['body']=$createCar->body();  
    $car['whell']=$createCar->whell();  
      
    print_r($car);

Il s'agit d'une classe d'usine standard. Maintenant, de nouvelles exigences sont apparues et l'usine doit également produire des camions.

Analyse : Puisque les camions de production répondent également aux normes de production de l'usine, nous pouvons directement ajouter la classe des camions et ajouter l'entrée correspondante à la classe d'usine.

class truck implements carNorms{  
          
        public function engine(){  
            return '卡车引擎';  
        }  
          
        public function body(){  
            return '卡车车身';  
        }  
          
        public function whell(){  
            return '卡车轮子';  
        }  
          
    }
//汽车工厂    
    class carFactory{    
            
        static public function carInstance($type){    
            $instance='';    
            switch($type){    
                case 'car':    
                    $instance=new car();    
                    break;    
                case 'bus':    
                    $instance=new bus();    
                    break;    
                case 'truck':    
                    $instance=new truck();    
                    break;    
                default:    
                    throw new Exception('本工厂无法生产这种类型的车');    
            }    
            if(!$instance instanceof carNorms){    
                throw new Exception('这种车不符合生产标准');    
            }    
            return $instance;    
        }    
            
    }

C'est facile à compléter, mais supposons ici que si les normes de production changent, des tests de qualité doivent être ajoutés au processus de production. Pour compléter ce changement, nous devons l'ajouter au processus de production. interface Méthodes de tests de qualité.

//生产汽车的标准  
    interface carNorms{  
        function engine();//引擎  
        function body();//车身  
        function whell();//轮子  
        function check();//质量测试  
    }

Le problème est que toutes les voitures produites dans l'usine doivent intégrer des méthodes de contrôle de qualité. Dans cette usine, seuls trois types de voitures sont produits, ce qui ne semble pas très gênant. Mais réfléchissons-y encore, si une usine possède des milliers de produits, l'ajout d'une norme ajoutera cette norme à chaque produit, combien de coûts cela engendrera-t-il ! C'est le défaut de la méthode usine. Soyez prudent lorsque vous utilisez le mode usine !

Ce qui précède est le contenu du développement orienté objet PHP - mode usine. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn