Heim Backend-Entwicklung PHP-Tutorial Zusammenfassung des PHP-Entwurfsmusters – Factory-Muster

Zusammenfassung des PHP-Entwurfsmusters – Factory-Muster

Dec 17, 2016 am 10:35 AM

Was ist der Zweck oder das Ziel der Verwendung von Fabrikmustern?

Der größte Vorteil des Factory-Musters liegt in der Objekterstellung, nämlich der Kapselung des Objekterstellungsprozesses, sodass jederzeit ein neues Objekt generiert werden kann.
Reduzieren Sie den Code, kopieren Sie ihn und fügen Sie ihn ein. Die Kopplungsbeziehung ist stark und wirkt sich auf andere Teile des Codes aus.

Um es für den Laien auszudrücken: Früher hat man „new“ verwendet, um ein Objekt zu erstellen, aber jetzt ist dieser Prozess gekapselt.
Angenommen, der Factory-Modus wird nicht verwendet: Dann wird an vielen Stellen Klasse a aufgerufen und der Code erstellt eine Instanz wie diese: new a() Angenommen, eines Tages muss der Name der Klasse a geändert werden. Das bedeutet, dass viele Aufrufcodes geändert werden müssen.

Der Vorteil des Fabrikmusters liegt in der Erstellung von Objekten.
Der Vorteil des Factory-Musters liegt in der Erstellung von Objekten. Richten Sie eine Factory (eine Funktion oder eine Klassenmethode) ein, um neue Objekte zu erstellen. Ihre Aufgabe besteht darin, den Objekterstellungsprozess zu kapseln.
Bei der Erstellung von Objekten werden keine neuen Objekte verwendet. Definieren Sie stattdessen eine Methode zum Erstellen von Objektinstanzen.

Jede Klasse muss möglicherweise eine Verbindung zur Datenbank herstellen. Kapseln Sie dann die Verbindung zur Datenbank in einer Klasse. Verwenden Sie in Zukunft Klassennamen in anderen Klassen:

Warum abstrakte Konzepte einführen?
Denken Sie darüber nach: Wenn wir im wirklichen Leben nicht in der Lage sind, etwas Bestimmtes zu bestimmen, ordnen wir eine Kategorie von Dingen oft einer abstrakten Kategorie zu.
Fabrikmethode:
Wenn Ihre Fabrik beispielsweise „Zigarettenfabrik“ heißt, kann sie „Septwolves-Fabrik“, „China-Fabrik“ usw. haben. Diese Fabrik produziert jedoch nur ein Produkt: Zigaretten
Abstrakte Fabrik: Es ist unmöglich zu beschreiben, welche Produkte sie produziert. Sie produziert viele Arten von Produkten (die abstrakte Fabrik generiert also Unterfabriken).
Ihre Fabrik ist umfassend und produziert „eine Reihe“ von Produkten statt „eines“, wie zum Beispiel: „Zigaretten“ und „Bier“ usw. Dann können auch bestimmte Fabriken daraus abgeleitet werden, aber diese Fabriken produzieren alle diese Produktserie, aber der Geschmack kann aufgrund unterschiedlicher Regionen und zur Anpassung an den lokalen Geschmack unterschiedlich sein.
Fabrikmuster: verstanden als eine Fabrik, die nur ein Produkt erzeugt. Zum Beispiel diejenigen, die Zigaretten herstellen.
Fabrikmethode: eine Produktproduktionslinie in der Fabrik. Zum Beispiel der Tastaturgenerierungsprozess.

Andere werden widerlegen: Ich habe nichts zu tun, wenn ich satt bin, also muss ich den Klassennamen ändern? Vielleicht. Im Allgemeinen werden Klassennamen nicht geändert.

Tatsächlich gibt es viele Variationen des Factory-Musters, und das Erfassen des Wesens ist der Schlüssel: Solange verschiedene Klasseninstanzen gemäß unterschiedlichen Parametern generiert werden können, entspricht dies der Designidee von ​​das Fabrikmuster.

Das erinnert mich daran, dass es im Framework oft Methoden gibt, die für die Generierung bestimmter Klasseninstanzen zum Aufruf verantwortlich sind.

Da ich phpcms schon einmal verwendet habe, ist es besser, phpcms zum besseren Verständnis wie folgt zu verwenden:

pc_base:load_app_class("order"');//Der Parametername ist die Klasse Name. Es wird eine Auftragsinstanz generiert. Die Übergabe verschiedener Parameter zum Abrufen verschiedener Klasseninstanzen entspricht dem Factory-Muster.
pc_base:load_app_class("comment"');//Generieren Sie eine Kommentarklasseninstanz

//Natürlich beinhaltet die Methode load_app_class auch die Idee des Singleton-Modus. Vermeiden Sie es, n-mal aufzurufen und wiederholt n identische Instanzen zu erstellen


Eine typische Anwendung, die ich mir im Factory-Modus vorstelle, ist: PHP muss möglicherweise eine Verbindung zu MySQL herstellen, oder es muss möglicherweise eine Verbindung zu SQL Server oder anderen Datenbanken herstellen . Erstellen Sie dann eine abstrakte Datenbankklasse.

Diese Klasse ist eine Factory-Klasse, die für die Generierung verschiedener Objekte verantwortlich ist.

Dies ist sehr praktisch für die Erweiterung. Wenn wir uns direkt mit der Datenbank verbinden, können wir statt des Codes new Mysql ($host, $username, $password, $dbname)

dynamisch eine Instanz generieren, um eine Verbindung mit der Datenbank herzustellen. Es kann MySQL sein oder mit Oracle verbunden sein.

Klasse DbFactory
{

Funktion statische Fabrik($db_class_name)
{

$db_class_name = strtolower($db_class_name);

if (include_once 'Drivers/' . $db_class_name . '.php') {

                                                                             } else {
            neue Ausnahme auslösen ('Die entsprechende Datenbankklasse wurde nicht gefunden');
DbFactory::factory("mysql");

DbFactory::factory("oracle");


hat auch ein Gegenstück in der Thinkphp-Framework-Implementierung:

Db.class.php ist eine Factory-Klasse (sie kann auch als mittlere Schicht der Datenbank bezeichnet werden). Sie wird als mittlere Schicht bezeichnet, da sie MySQL, Oracle und andere Datenbanken betreiben kann. Diese Klasse ist die mittlere Schicht. , Schild die spezifische Implementierung. Ermöglichen Sie Programmierern, die mittlere Ebene mit MySQL, Oracle und anderen Datenbanken zu verbinden. Es gibt eine Factory()-Methode in Db.class.phpöffentliche Funktionsfabrik ($db_config='') {
                                                                                                                                                  $db_config. =                    ])
                                                                              throw_Exception(L('_NO_DB_CONFIG_')); $class = 'Db'.
if(is_file(CORE_PATH.'Driver/Db/'.$class.'.class.php')) {
// Eingebauter Treiber strtolower ($ db_config ['dbms'])
$ db- & gt; dBtype = strtoupper ($ this- & gt; dbType);
sonst
$db->dbType = $this-& gt; _getDsnType($db_config['dsn']);
                                                                                                                                                                  Exception(L('_NOT_SUPPORT_ DB_ ').': ' . $db_config['dbms'] );
                                                             return $db; Entspricht verschiedenen Zahlungsgateways: Alipay, Tenpay, Online-Banking usw. Um zukünftige Erweiterungen zu erleichtern, ist es im Werksmodus konzipiert. Definieren Sie eine Fabrik, die sich auf die Herstellung von Gateway-Schnittstellen spezialisiert hat, abstrahieren Sie sie und machen Sie daraus eine Schnittstellenform, sodass alle Unterklassen ihre Schnittstelle implementieren müssen. Wenn Sie in Zukunft eine Zahlungsmethode hinzufügen, welche Zahlungsmethode Sie verwenden möchten, ändern Sie einfach die Parameter.


Das Buch (englischer Name ist PHP 5 Power Programming) erwähnte auch einen Trick: Teilen Sie Benutzer bei der Registrierung in viele Benutzerrollen auf . Wie registrierte Benutzer, anonyme Benutzer, Administratorbenutzer usw. Mit der Idee der Fabriken kann eine vollständige Nutzung erreicht werden, der Code ist zudem einfach zu warten und für jede Rolle können Operationsklassen generiert werden.

Definieren Sie die folgenden Klassen:

UserFactory Benutzerfabrikklasse, verantwortlich für die Generierung verschiedener Benutzerklassen
Benutzer: Die Basisklasse der Benutzerklassen, alle Benutzerklassen erben diese Klasse
Klassen für verschiedene Rollen: registrierte Benutzerklasse, anonyme Benutzerklasse, Administrator-Benutzerklasse







Mehr PHP-Entwurfsmusterzusammenfassung-Factory Für musterbezogen Artikel, achten Sie bitte auf die chinesische PHP-Website!

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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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)

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Wie funktioniert die Session -Entführung und wie können Sie es in PHP mildern? Wie funktioniert die Session -Entführung und wie können Sie es in PHP mildern? Apr 06, 2025 am 12:02 AM

Die Hijacking der Sitzung kann in den folgenden Schritten erreicht werden: 1. Erhalten Sie die Sitzungs -ID, 2. Verwenden Sie die Sitzungs -ID, 3. Halten Sie die Sitzung aktiv. Zu den Methoden zur Verhinderung der Sitzung der Sitzung in PHP gehören: 1. Verwenden Sie die Funktion Session_regenerate_id (), um die Sitzungs -ID zu regenerieren. 2. Store -Sitzungsdaten über die Datenbank, 3. Stellen Sie sicher, dass alle Sitzungsdaten über HTTPS übertragen werden.

Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Apr 03, 2025 am 12:04 AM

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Mar 31, 2025 pm 11:54 PM

So setzen Sie die Berechtigungen von Unixsocket automatisch nach dem Neustart des Systems. Jedes Mal, wenn das System neu startet, müssen wir den folgenden Befehl ausführen, um die Berechtigungen von Unixsocket: sudo ...

Wie debugge ich den CLI -Modus in PhpStorm? Wie debugge ich den CLI -Modus in PhpStorm? Apr 01, 2025 pm 02:57 PM

Wie debugge ich den CLI -Modus in PhpStorm? Bei der Entwicklung mit PHPSTORM müssen wir manchmal den PHP im CLI -Modus (COMS -Zeilenschnittstellen) debuggen ...

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Apr 01, 2025 pm 03:12 PM

Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...

See all articles