Factory-Klasse ist eine Klasse, die speziell zum Erstellen anderer Objekte verwendet wird. Die Factory-Klasse ist in der Praxis der polymorphen Programmierung sehr wichtig. Es ermöglicht den dynamischen Austausch von Klassen und die Änderung von Konfigurationen, wodurch die Anwendung flexibler wird. Die Beherrschung des Fabrikmusters ist für die Webentwicklung unerlässlich.
Das Fabrikmuster wird normalerweise verwendet, um verschiedene Klassen zurückzugeben, die Schnittstellen ähneln. Eine häufige Verwendung von Fabriken besteht darin, polymorphe Anbieter zu erstellen.
Normalerweise verfügt das Factory-Muster über ein Schlüsselkonstrukt, bei dem es sich um eine statische Methode handelt, die normalerweise Factory genannt wird. Diese statische Methode kann beliebig viele Parameter akzeptieren und muss ein Objekt zurückgeben.
Das Factory-Muster ist im polymorphen Design sehr wichtig. Bei richtiger Anwendung kann es die Anwendung portabler machen und die Abhängigkeiten zwischen Klassen lockern, wodurch die Flexibilität verbessert wird. Wenn das Singleton-Muster als die Verantwortung der Klasse betrachtet wird, dann ist das Factory-Muster der Polymorphismus der Klasse.
Was ist also eine Fabrikklasse?
Konzept: Eine Factory-Klasse bezieht sich auf eine Klasse, die eine Methode enthält, die speziell zum Erstellen anderer Objekte verwendet wird.
Anwendungsszenario: Factory-Muster werden normalerweise verwendet, um verschiedene Klassen zurückzugeben, die ähnlichen Schnittstellen entsprechen. Mit anderen Worten, Factory-Klassen ermöglichen es uns, basierend auf der Konfiguration oder Anwendungslogik zu entscheiden, welche Klasse instanziiert werden soll.
Das Folgende ist ein einfacher Factory-Klassencode:
<spanmicrosoft yahei><span>interface</span><span> IDatabase {
//...</span><span>public</span> <span>function</span> query(<span>$sql</span><span>);</span><span> } </span><span>class</span><span> DBFactory { </span><span>public</span> <span>static</span> <span>function</span> create(<span>$type</span><span>){ </span><span>$db</span> = <span>null</span><span>; </span><span>switch</span> (<span>$type</span><span>) { </span><span>case</span> 'mysql': <span>$db</span> = <span>new</span> <span>Mysql</span>(<span>/*</span><span>*arguments</span><span>*/</span><span>); </span><span>break</span><span>; </span><span>case</span> 'sqlite': <span>$db</span> = <span>new</span> Sqlite(<span>/*</span><span>*arguments</span><span>*/</span><span>); </span><span>break</span><span>; </span><span>case</span> 'pgsql': <span>$db</span> = <span>new</span> PGsql(<span>/*</span><span>*arguments</span><span>*/</span><span>); </span><span>break</span><span>; </span><span>default</span>: <span>#</span><span> code...</span> <span>break</span><span>;
} </span><span>return</span> <span>$db</span><span>;
}
} </span><span>class</span> <span>Mysql</span> <span>implements</span><span> IDatabase {
</span><span>//... </span><span>public</span> <span>function</span> query(<span>$sql</span><span>){
}</span><span> } </span><span>/*</span><span>*other class ...</span><span>*/</span></spanmicrosoft>
Nach dem Login kopieren
Verwenden Sie die Factory-Klasse:
<spanmicrosoft yahei><span>$db</span> = DBFactory::create('mysql'<span>); </span><span>$db</span>->query('show database');</spanmicrosoft>
Nach dem Login kopieren
Jede Datenbank erbt hier die angegebene Schnittstelle. Der Zweck besteht darin, sicherzustellen, dass alle Datenbankobjekte eine konsistente externe Leistung aufweisen. Externe Klassen können die in der Schnittstelle deklarierten Methoden sicher verwenden, was wir in der Softwareentwicklung oft als für Benutzer transparent bezeichnen. Wenn wir eines Tages aufgrund von Änderungen im Computerraum zu einer anderen Datenbank wechseln möchten, müssen wir nur die entsprechenden Datenbankklassen entsprechend der Schnittstelle implementieren und den Geschäftscode nicht ändern. Dies spiegelt die Flexibilität und Polymorphie der Fabrikklasse wider.
Aus einer anderen Perspektive haben wir alle Änderungen am Eingang konzentriert. Für diese Änderungen ist keine wiederholte interne If-Else-Verarbeitung erforderlich.
Okay, es gibt nur so viel theoretischen Inhalt, dass mehr Erfahrung in Projekten angewendet werden muss und deren Vorteile geschätzt werden müssen.
Das Obige stellt die Entwurfsmuster in PHP vor: Factory-Muster, einschließlich des Inhalts des PHP-Factory-Musters. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.