Table des matières
php模式设计之 工厂模式,php模式设计工厂
Maison php教程 php手册 php模式设计之 工厂模式,php模式设计工厂

php模式设计之 工厂模式,php模式设计工厂

Jun 13, 2016 am 08:55 AM
php5

php模式设计之 工厂模式,php模式设计工厂

  承接上篇php模式设计之 单例模式,(虽然好像关系不大)。今天讲述第二种基础的模式设计——工厂模式。

  那么何为工厂模式?

  从名字来看,似乎看不出什么端倪。工厂模式,和生产有关?还是和生产流程有关?难道还和工厂领导有关?和领导秘书有关?秘书...     好了不卖关子了,所谓工厂模式还真和生产有关。生产什么呢?生产出来的是一个实例对象。通过什么设备生产?通过一个工厂类生产。怎么生产呢?工厂类调用自身静态方法来生产对象实例

   工厂模式有一个关键的构造,根据一般原则命名为Factory的静态方法,然而这只是一种原则,虽然工厂方法可以任意命名这个静态还可以接受任意数据的参数,必须返回一个对象。

  为什么要是用工厂模式?

  很多没接触过工厂模式的人会不禁问,为啥我要费那么大的劲儿去构造工厂类去创建对象呢?不去套用那些易维护,可扩展之类的话,我们可以考虑这样一个简单的问题。如果项目中,我们通过一个类创建对象。在快完成或者已经完成,要扩展功能的时候,发现原来的类类名不是很合适或者发现类需要添加构造函数参数才能实现功能扩展。我靠!我都通过这个类创建了一大堆对象实例了啊,难道我还要一个一个去改不成?我们现在才感受到了“高内聚低耦合”的博大精深。没问题,工厂方法可以解决这个问题。

  再考虑一下,我要连接数据库,在php里面就有好几种方法,mysql扩展,mysqli扩展,PDO扩展。我就是想要一个对象用来以后的操作,具体要哪个,视情况而定喽。既然你们都是连接数据库的操作,你们就应该拥有相同的功能,建立连接,查询,断开连接...(此处显示接口的重要性)。总而言之,这几种方法应该“团结一致,一致对外”。如何实现呢?利用工厂模式。

  工厂模式如何实现?

  相对于单例模式,上面我们提供了足够的信息,工厂类,工厂类里面的静态方法。静态方法里面new一下需要创建的对象实例就搞定了。当然至于考虑上面的第二个问题,根据工厂类静态方法的参数,我们简单做个判断就好了。管你用if..else..还是switch..case..,能快速高效完成判断该创建哪个类的工作就好了。最后,一定要记得,工厂类静态方法返回一个对象。不是两个,更不是三个。

  基本的工厂类

<span>//</span><span>要创建对象实例的类</span>
<span>class</span><span> MyObject{
  
}
 </span><span>//</span><span>工厂类</span>
<span>class</span><span> MyFactory{
</span><span>public</span> <span>static</span> <span>function</span><span> factory(){
</span><span>return</span> <span>new</span> MyObject():<span>
   }
}
 
 
</span><span>$instance</span>=MyFactory::factory();
Copier après la connexion

  一个稍微复杂的工厂模式:

<?<span>php

</span><span>interface</span><span> Transport{
    </span><span>public</span> <span>function</span><span> go();

}

</span><span>class</span> Bus <span>implements</span><span> Transport{
    </span><span>public</span> <span>function</span><span> go(){
        </span><span>echo</span> "bus每一站都要停"<span>;
    }
}

</span><span>class</span> Car <span>implements</span><span> Transport{
    </span><span>public</span> <span>function</span><span> go(){
        </span><span>echo</span> "car跑的飞快"<span>;
    }
}

</span><span>class</span> Bike <span>implements</span><span> Transport{
    </span><span>public</span> <span>function</span><span> go(){
        </span><span>echo</span> "bike比较慢"<span>;
    }
}

</span><span>class</span><span> transFactory{
    </span><span>public</span> <span>static</span> <span>function</span> factory(<span>$transport</span><span>)
    {
        
        </span><span>switch</span> (<span>$transport</span><span>) {
            </span><span>case</span> 'bus':
                <span>return</span> <span>new</span><span> Bus();
                </span><span>break</span><span>;

            </span><span>case</span> 'car':
                <span>return</span> <span>new</span><span> Car();
                </span><span>break</span><span>;
            </span><span>case</span> 'bike':
                <span>return</span> <span>new</span><span> Bike();
                </span><span>break</span><span>;
        }
    }
}

</span><span>$transport</span>=transFactory::factory('car'<span>);
</span><span>$transport</span>->go();
Copier après la connexion

  需要工厂静态方法为factory()的时候,千万别再傻乎乎的把工厂类命名为Factory了。为啥啊?别忘了同名构造函数的事儿啊~

  

  最后还是谈点感受吧,很多新手比较眼高手低,刚刚会了if..else..,session,cookie就要来点高大上的了。与人交谈动辄可扩展性,可维护性之类云云,至于实例的话,就会一时语塞。有时候觉得,无论自己写代码还是和别人学习,都处于“众里寻他千百度”的时候,真正踏实学习后,蓦然回首,“那人却在灯火阑珊处”,大呼:“原来这TM就是***啊”。

  笔者不敢承认自己会模式设计,我也是个不足一年的初学者,分享博客只是想记录自己的学习历程,能得到知道更是求之不得。如果能给别人带来帮助,那就更好啦~~~

 

 

系列文章:

      php模式设计之 单例模式

    php模式设计之 工厂模式

    php模式设计之 注册树模式

 

Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelle est la différence entre php5 et php8 Quelle est la différence entre php5 et php8 Sep 25, 2023 pm 01:34 PM

Les différences entre php5 et php8 concernent les performances, la structure du langage, le système de types, la gestion des erreurs, la programmation asynchrone, les fonctions de bibliothèque standard et la sécurité. Introduction détaillée : 1. Amélioration des performances. Par rapport à PHP5, PHP8 présente une énorme amélioration des performances. PHP8 introduit un compilateur JIT, qui peut compiler et optimiser certains codes d'exécution à haute fréquence, améliorant ainsi la vitesse d'exécution. PHP8 introduit de nouvelles structures et fonctions de langage. PHP8 prend en charge les paramètres nommés, permettant aux développeurs de transmettre les noms des paramètres au lieu de l'ordre des paramètres, etc.

Comment changer le port 80 en php5 Comment changer le port 80 en php5 Jul 24, 2023 pm 04:57 PM

Comment changer le port 80 dans php5 : 1. Modifiez le numéro de port dans le fichier de configuration du serveur Apache ; 2. Modifiez le fichier de configuration PHP pour vous assurer que PHP fonctionne sur le nouveau port ; 3. Redémarrez le serveur Apache et l'application PHP le fera. commencez à exécuter sur le nouveau port.

Comment résoudre le problème que PHP5 n'écoute pas sur le port 9000 Comment résoudre le problème que PHP5 n'écoute pas sur le port 9000 Jul 10, 2023 pm 04:01 PM

Étapes de solution pour que PHP5 n'écoute pas le port 9000 : 1. Vérifiez le fichier de configuration PHP-FPM ; 2. Redémarrez le service PHP-FPM ; 3. Désactivez le pare-feu ou configurez la redirection de port ; 4. Vérifiez si d'autres processus occupent le port 9000.

Quelle est la différence entre la syntaxe php7 et php5 Quelle est la différence entre la syntaxe php7 et php5 Jul 10, 2023 pm 03:25 PM

Les différences de syntaxe entre php7 et php5 sont : 1. PHP7 introduit des déclarations de type strictes, tandis que le type des variables PHP5 est implicite ; 2. PHP7 introduit le support des déclarations de type scalaire, mais pas PHP5 3. PHP7 introduit l'opérateur de fusion NULL, tandis que PHP5 vérifie si une variable existe et n'est pas nulle, vous devez utiliser une instruction conditionnelle ; 4. PHP7 ajoute un nouvel opérateur de comparaison "<=>", mais pas PHP5 ; 5. PHP7 introduit une nouvelle fonctionnalité de classe anonyme, tandis que PHP5 ce n'est pas le cas.

Quelles sont les différences entre la version de php7 et la version 5 ? Quelles sont les différences entre la version de php7 et la version 5 ? Sep 15, 2023 pm 04:11 PM

Les différences entre les versions de php7 et 5 incluent des améliorations de performances, des déclarations de type scalaire, des déclarations de type de valeur de retour, des améliorations de la gestion des exceptions, des classes anonymes, des améliorations de la syntaxe, de nouveaux opérateurs, une gestion améliorée des erreurs et la suppression de certaines anciennes fonctionnalités. Introduction détaillée : 1. Amélioration des performances. PHP7 introduit un nouveau moteur Zend, nommé Zend Engine 3.0, qui apporte une amélioration significative des performances. Les performances de PHP7 sont environ deux fois supérieures à celles de PHP5, principalement grâce à une gestion améliorée de la mémoire, des appels de fonctions optimisés et une gestion des exceptions. , collecte améliorée des déchets, etc.

Comment résoudre le problème que PHP5 n'écoute pas sur le port 9000 Comment résoudre le problème que PHP5 n'écoute pas sur le port 9000 Mar 21, 2023 pm 04:32 PM

Lors de l'utilisation de PHP5, certains utilisateurs peuvent rencontrer la situation dans laquelle le port 9000 ne peut pas être écouté. À l’heure actuelle, nous devons effectuer des travaux de configuration et de dépannage pour résoudre ce problème.

Comment changer le port 80 en php5 Comment changer le port 80 en php5 Mar 21, 2023 pm 04:32 PM

​Si vous êtes un administrateur de site Web, vous pourriez rencontrer une situation dans laquelle vous devrez modifier le port PHP5 du port par défaut 80. Ce processus peut être un peu précipité, mais tant que vous suivez les étapes ci-dessous, il sera facilement complété.

Discutez des différences de syntaxe entre PHP7 et PHP5 Discutez des différences de syntaxe entre PHP7 et PHP5 Mar 21, 2023 pm 07:10 PM

PHP est un langage de programmation côté serveur largement utilisé pour développer des sites Web et des applications dynamiques. Ces dernières années, la sortie de PHP7 a attiré une certaine attention. PHP7 présente de nombreuses améliorations et optimisations par rapport aux versions précédentes (telles que PHP5). Dans cet article, nous explorerons les différences de syntaxe entre PHP7 et PHP5.

See all articles