Heim Backend-Entwicklung PHP-Tutorial PHP-objektorientierte erweiterte Entwurfsmuster: Beispiele für die Verwendung von Fabrikmustern

PHP-objektorientierte erweiterte Entwurfsmuster: Beispiele für die Verwendung von Fabrikmustern

May 22, 2017 pm 02:06 PM

Die größte Switch/Case-Anweisung, die ich je in einem objektorientierten Programm gesehen habe, hatte über 20 Bedingungen. Zur Laufzeit führt dieses Codemodul jedes Mal alle Bedingungen aus. Jede Bedingung ist für die Erstellung eines neuen Objekts verantwortlich, das zur Kommunikation mit externen Benutzern der API der Anwendung verwendet wird. Nachdem ich bei einer davon einige allgemeine Fehlerbehebungen durchgeführt hatte, begann ich, mir die von der Anwendung implementierten Schnittstellen anzusehen. Zu meiner Überraschung implementiert jede Klasse, auf die in der switch/case-Anweisung verwiesen wird, dieselbe Schnittstelle! Beim späteren Hinzufügen neuer bedingter Anweisungen zur switch/case-Anweisung empfehle ich stattdessen die Verwendung des Factory-Musters.

Was ist ein Fabrikmuster?

Das Fabrikentwurfsmuster stellt eine Schnittstelle zum Abrufen einer neuen Instanz eines Objekts bereit und ermöglicht gleichzeitig dem aufrufenden Code, die Schritte zur tatsächlichen Instanziierung der Basisklasse nicht festzulegen.

Während PHP sich weiterentwickelt und zu einer Sprache entwickelt, bieten seine Funktionen weiterhin einfache Mittel zur Entwicklung durch die Anwendung bewährter Designmuster. Eine besonders nützliche Funktion in PHP ist die Möglichkeit, basierend auf dem Inhalt von Variablen neue Instanzen einer Klasse zu erstellen. Diese dynamische Methode der Objektinstanziierung ist ein Codeblock-Building-Ansatz zur Implementierung des Factory-Entwurfsmusters in PHP.

Klassen, die auf dem Factory-Design-Muster basieren, tragen dazu bei, die bedingungsbasierte Komplexität im Hauptcodefluss zu reduzieren. In einer Anwendung werden Objekte auf viele verschiedene Arten aufgerufen. Jede Änderung im Zusammenhang mit der Erstellung eines Objekts wirkt sich auf den Rest der Anwendung aus. Angenommen, Sie instanziieren eines von fünf Objekten, um einige Funktionen zu vervollständigen. Ein Ansatz besteht darin, bedingte Anweisungen zu erstellen, um zu bestimmen, welche Objekte instanziiert werden. Bedingte Anweisungen können komplexe if/else-Anweisungen oder switch/case-Anweisungen sein. Diese Funktionalität kann an vielen Stellen in der Anwendung verwendet werden, führt jedoch zu doppeltem Code. Wenn als nächstes ein sechstes Objekt hinzugefügt oder der Name eines der fünf vorhandenen Objekte geändert wird, müssen alle Instanzen des Programmcodes geändert und erneut getestet werden. Das Factory-Design-Muster hilft, dieses Problem zu vermeiden, indem es eine einfache Schnittstelle zum Erstellen der oben genannten Objekte bereitstellt. Unabhängig davon, ob das Objekt geändert oder andere Objekte hinzugefügt werden, wird das Factory-Objekt immer noch auf die gleiche Weise aufgerufen. Das Anzeigen eines Blogeintrags ist ein Anzeigebeispiel.

Die Erstellung verschiedener Objekte ist nicht der einzige Zweck der Verwendung des Fabrikdesignmusters. Ein weiterer Anwendungsfall für Klassen, die auf dem Factory-Entwurfsmuster basieren, ist die Arbeit mit Objektsammlungen. In diesem Fall enthält die Objektsammlung dasselbe Basisobjekt, aber jedes Objekt weist unterschiedliche Eigenschaften auf.

Wenn mehrere Schritte erforderlich sind, um den Typ des zu erstellenden Objekts zu bestimmen, ist es besser, eine Klasse zu verwenden, die auf dem Fabrikentwurfsmuster basiert, um neue Instanzen abzurufen.

UML

Dieses UML-Diagramm beschreibt detailliert einen Klassenentwurf unter Verwendung des Fabrikentwurfsmusters.

PHP-objektorientierte erweiterte Entwurfsmuster: Beispiele für die Verwendung von Fabrikmustern

Das Folgende ist eine Beschreibung des obigen Bildes:

1 Die beiden vorhandenen Basisklassen sind MyObjectTyepA und MyObjectTyepB. Beide Minen verfügen über eine öffentliche Methode namens doSomething(), die objektspezifische Logik auf ihre eigene, einzigartige Weise ausführt. Die öffentlichen Schnittstellen und Rückgabetypen der beiden Basisklassen sind genau gleich.

2. Die MyObjectFactory-Klasse wird verwendet, um eine Instanz einer der oben genannten Basisklassen zu erstellen und sie an den Codefluss zurückzugeben. Es verfügt über eine öffentliche Methode namens createObject(), die einen Parametertyp akzeptiert, der dabei hilft, zu bestimmen, welche Basisklasseninstanz erstellt werden soll. Anschließend gibt die Methode createObject() eine Instanz der angeforderten Typklasse zurück.

Verwendungsbeispiele für PHP-Designmuster-Fabrikmuster

<?php
/*
* 每日练习 PHP设计模式工厂模式的使用方法
* PHP工厂模式不难理解,顾名思义,就是一个加工厂,然后工厂是制造产品的,只要制造产品
* 就必须有几个要素:"方法","模型","工厂车间"。
*/
/*第一种示例 普通工厂模式
* */
abstract class model {//产品模型
abstract function getNames();
}
class zhangsan extends model {//产品实例
function getNames(){
return "my name is zhengsan";
}
}
class lisi extends model{//产品实例
function getNames(){
return "my name is lisi";
}
}
abstract class gongchangModel {//工厂模型
abstract function getZhangsan();
abstract function getLisi();
}
class gongchang extends gongchangModel{//工厂实例
function getZhangsan(){
return new zhangsan();
}
function getLisi(){
return new lisi();
}
}
$gongchang=new gongchang();//实例化工厂
$zhangsan=$gongchang->getZhangsan();//制造产品
echo $zhangsan->getNames();//产品输出功能
?>
Nach dem Login kopieren

Ich habe zuvor einen Artikel über das Fabrikdesignmuster geschrieben. Tatsächlich umfasst das Fabrikmuster das gewöhnliche Fabrikmuster und das abstrakte Fabrikmuster , aber egal um welches Factory-Muster es sich handelt, sie haben alle eine Funktion, nämlich die Generierung von Objekten.

Okay, verwenden wir das einfachste Beispiel unten, um das Factory-Muster im PHP-Entwurfsmuster zu demonstrieren.

Ich habe die drei Elemente des Fabrikmodells zusammengefasst:

1. Produktmodell

3

Das obige ist der detaillierte Inhalt vonPHP-objektorientierte erweiterte Entwurfsmuster: Beispiele für die Verwendung von Fabrikmustern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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

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)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
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)

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

See all articles