Inhaltsverzeichnis
php模式设计之 工厂模式,php模式设计工厂
Heim 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();
Nach dem Login kopieren

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

<?<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();
Nach dem Login kopieren

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

  

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

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

 

 

系列文章:

      php模式设计之 单例模式

    php模式设计之 工厂模式

    php模式设计之 注册树模式

 

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Unterschied zwischen PHP5 und PHP8? Was ist der Unterschied zwischen PHP5 und PHP8? Sep 25, 2023 pm 01:34 PM

Die Unterschiede zwischen PHP5 und PHP8 bestehen in Bezug auf Leistung, Sprachstruktur, Typsystem, Fehlerbehandlung, asynchrone Programmierung, Standardbibliotheksfunktionen und Sicherheit. Detaillierte Einführung: 1. Leistungsverbesserung: PHP8 führt einen JIT-Compiler ein, der einige hochfrequente Ausführungscodes kompilieren und optimieren kann, wodurch die Ausführungsgeschwindigkeit verbessert wird. PHP8 führt einige neue Sprachstrukturen und Funktionen ein. PHP8 unterstützt benannte Parameter, sodass Entwickler Parameternamen anstelle der Parameterreihenfolge usw. übergeben können.

So ändern Sie Port 80 in PHP5 So ändern Sie Port 80 in PHP5 Jul 24, 2023 pm 04:57 PM

So ändern Sie Port 80 in PHP5: 1. Bearbeiten Sie die Portnummer in der Apache-Serverkonfigurationsdatei. 2. Bearbeiten Sie die PHP-Konfigurationsdatei, um sicherzustellen, dass PHP auf dem neuen Port funktioniert. 3. Starten Sie den Apache-Server neu Beginnen Sie mit der Ausführung auf dem neuen Port.

So lösen Sie das Problem, dass PHP5 Port 9000 nicht überwacht So lösen Sie das Problem, dass PHP5 Port 9000 nicht überwacht Jul 10, 2023 pm 04:01 PM

Lösungsschritte für PHP5, das Port 9000 nicht überwacht: 1. Überprüfen Sie die PHP-FPM-Konfigurationsdatei. 2. Starten Sie den PHP-FPM-Dienst neu. 3. Schalten Sie die Firewall aus oder konfigurieren Sie die Portweiterleitung. 4. Überprüfen Sie, ob andere Prozesse Port 9000 belegen.

Was ist der Unterschied zwischen der PHP7- und der PHP5-Syntax? Was ist der Unterschied zwischen der PHP7- und der PHP5-Syntax? Jul 10, 2023 pm 03:25 PM

Die Syntaxunterschiede zwischen PHP7 und PHP5 sind: 1. PHP7 führt strikte Typdeklarationen ein, während der Typ von PHP5-Variablen implizit ist. 2. PHP7 führt Unterstützung für Skalartypdeklarationen ein, PHP5 jedoch nicht. 3. PHP7 führt den NULL-Merge-Operator ein PHP5 prüft, ob eine Variable existiert und nicht null ist. Sie müssen eine bedingte Anweisung verwenden. 4. PHP7 fügt einen neuen Vergleichsoperator „<=>“ hinzu, PHP5 führt jedoch keine neue Funktion ein, während PHP5 nicht.

Was sind die Unterschiede zwischen der Version von PHP7 und 5? Was sind die Unterschiede zwischen der Version von PHP7 und 5? Sep 15, 2023 pm 04:11 PM

Zu den Unterschieden zwischen der Version von PHP 7 und 5 gehören Leistungsverbesserungen, Skalartypdeklarationen, Rückgabewerttypdeklarationen, Verbesserungen bei der Ausnahmebehandlung, anonyme Klassen, Syntaxverbesserungen, neue Operatoren, verbesserte Fehlerbehandlung und die Entfernung einiger alter Funktionen. Detaillierte Einführung: 1. Leistungsverbesserung: PHP7 führt eine neue Zend-Engine mit dem Namen Zend Engine 3.0 ein. Die Leistung von PHP7 ist etwa doppelt so hoch wie die von PHP5, hauptsächlich durch verbesserte Speicherverwaltung, optimierte Funktionsaufrufe und Ausnahmebehandlung , verbesserte Speicherbereinigung usw.

So lösen Sie das Problem, dass PHP5 Port 9000 nicht überwacht So lösen Sie das Problem, dass PHP5 Port 9000 nicht überwacht Mar 21, 2023 pm 04:32 PM

Bei der Verwendung von PHP5 kann es bei einigen Benutzern vorkommen, dass Port 9000 nicht abgehört werden kann. Zu diesem Zeitpunkt müssen wir einige Konfigurations- und Fehlerbehebungsarbeiten durchführen, um dieses Problem zu lösen.

So ändern Sie Port 80 in PHP5 So ändern Sie Port 80 in PHP5 Mar 21, 2023 pm 04:32 PM

​Wenn Sie ein Website-Administrator sind, kann es vorkommen, dass Sie den PHP5-Port vom Standardport 80 ändern müssen. Dieser Vorgang kann etwas eilig sein, aber solange Sie die folgenden Schritte befolgen, wird er problemlos abgeschlossen.

Besprechen Sie die Syntaxunterschiede zwischen PHP7 und PHP5 Besprechen Sie die Syntaxunterschiede zwischen PHP7 und PHP5 Mar 21, 2023 pm 07:10 PM

PHP ist eine weit verbreitete serverseitige Programmiersprache zur Entwicklung dynamischer Websites und Anwendungen. In den letzten Jahren hat die Veröffentlichung von PHP7 einige Aufmerksamkeit erregt. PHP7 weist gegenüber früheren Versionen (z. B. PHP5) viele Verbesserungen und Optimierungen auf. In diesem Artikel werden wir die Syntaxunterschiede zwischen PHP7 und PHP5 untersuchen.

See all articles