


Verstehen Sie das Template-Methodenmuster von PHP-Entwurfsmustern in einem Artikel
Das Vorlagenmethodenmuster ist auch ein häufig verwendetes Entwurfsmuster, bei dem es sich um ein Verhaltensentwurfsmuster handelt. Seine Definition lautet: Definieren Sie das Grundgerüst eines Algorithmus in einer Methode und verschieben Sie einige Schritte auf Unterklassen. Mithilfe von Vorlagenmethoden können Unterklassen bestimmte Schritte im Algorithmus neu definieren, ohne die Struktur des Algorithmus zu ändern.
Szenario
Normalerweise stehe ich am Wochenende spät auf, also gehe ich nicht raus, um Frühstück zu kaufen, sondern mache vielleicht einfach einen Eimer Instantnudeln oder scharf-saure Nudeln oder Huainan-Rindfleischsuppe . Die Schritte zum Einweichen von Instantnudeln oder scharf-sauren Nudeln sind die gleichen. Zuerst müssen Sie kochendes Wasser zubereiten, dann die Instantnudeln oder scharf-sauren Nudeln in kochendem Wasser einweichen, dann Ihr eigenes Gewürzpaket hinzufügen und schließlich einweichen 2 bis 3 Minuten. Es gibt zwei Schritte, die genau gleich sind (kochendes Wasser vorbereiten, 2 bis 3 Minuten einweichen) und zwei Schritte, die ähnlich sind (Zutaten einweichen, entsprechende Gewürzpäckchen hinzufügen).
Für das obige Szenario können wir einen Algorithmus zum Einweichen von Instantnudeln oder scharf-sauren Nudeln definieren. Dieser Algorithmus ist sehr einfach, 4 Schritte
Kochendes Wasser vorbereiten
Zutaten einweichen (Instant-Nudeln oder scharf-saure Nudeln)
Gewürze hinzufügen (Instant-Nudeln und scharf-saure Nudeln haben ihre eigenen Gewürzbeutel)
2–3 Minuten in kochendem Wasser einweichen
Jetzt verwenden wir das Muster der Vorlagenmethode, um die oben genannten Anforderungen zu erfüllen.
Definieren Sie zunächst eine abstrakte Klasse, die den spezifischen Algorithmus und jeden Schritt definiert.
abstract class Breakfast { final public function prepare () { $this->boilWater(); $this->brew(); $this->addSeasoning(); $this->wait(); } public function boilWater () { echo '准备开水' . PHP_EOL; } // 泡食材 abstract public function brew (); // 加调料 abstract public function addSeasoning (); public function wait () { echo '等待2~3分钟' . PHP_EOL; } }
Die Prepare-Methode enthält den spezifischen Algorithmus. Durch Hinzufügen von final zu dieser Methode wird verhindert, dass die Methode überschrieben wird. Darüber hinaus können Sie sehen, dass es hier zwei abstrakte Methoden gibt, die von zukünftigen Generationen vervollständigt werden müssen.
Als nächstes vervollständigen wir die Kategorien Instantnudeln und scharf-saure Nudeln. Diese beiden Klassen müssen Breakfast erben und dann die abstrakte Methode abschließen.
class Noodle extends Breakfast { public function brew () { echo '加入方便面' . PHP_EOL; } public function addSeasoning () { echo '加入方便面的调料包' . PHP_EOL; } } class Powder extends Breakfast { public function brew () { echo '加入酸辣粉' . PHP_EOL; } public function addSeasoning () { echo '加入酸辣粉的调料包' . PHP_EOL; } }
Das obige Beispiel ist ein typisches Vorlagenmethodenmuster. Das Algorithmusgerüst wird in der übergeordneten Klasse definiert und die Unterklasse führt einige Schritte im Algorithmus aus.
Hooks
Das obige Beispiel spiegelt ein häufiges Szenario im Vorlagenmethodenmuster wider: Wiederverwendung. Neben der Wiederverwendung ist das Vorlagenmethodenmuster auch eine wichtige Anwendungserweiterung.
Das Template-Methodenmuster wird durch Hooks erweitert. Ein Hook ist eine in einer abstrakten Klasse deklarierte Methode, jedoch mit einer leeren oder Standardimplementierung. Das Vorhandensein von Hooks gibt Unterklassen die Möglichkeit, verschiedene Punkte des Algorithmus einzubinden. Es liegt an der Unterklasse, zu entscheiden, ob sie eingehängt wird oder nicht.
Lassen Sie uns weiterhin die Verwendung von Haken anhand von Beispielen erklären. Wenn ich Instantnudeln esse, füge ich normalerweise Schinken oder Eier hinzu. Das Hinzufügen von Schinken und Eiern ist ungewiss, daher können wir es einhaken und die Unterklasse entscheiden lassen, ob Schinken oder Eier hinzugefügt werden sollen.
Frühstück.php ändern
abstract class Breakfast { final public function prepare () { $this->boilWater(); $this->brew(); $this->addSeasoning(); $this->hook(); $this->wait(); } // 省略部分方法 // 默认不做任何事情 public function hook () :void {} }
Noodle.php ändern und die Hook-Methode neu schreiben
public function hook(): void { echo '加入火腿和鸡蛋' . PHP_EOL; }
Template-Methodenmuster und Callback-Funktion
Es gibt viele Funktionen in PHP, die ähnliche Ideen wie das Template-Methodenmuster oder die Template-Strategie verwenden Muster, wie zum Beispiel die Funktion sort(), die den Sortieralgorithmus kapselt, aber die spezifischen Sortierregeln werden durch die Rückruffunktion vervollständigt. Durch die Rückruffunktion müssen keine abstrakten Klassen und Unterklassen erstellt werden, wodurch die Codemenge erheblich reduziert wird.
Die Beziehung zwischen Template-Methodenmuster, Factory-Methodenmuster und Strategiemuster
Factory-Methodenmuster ist eine Sonderform des Template-Methodenmusters.
Die Vorlagenmethode basiert auf dem Vererbungsmechanismus: Sie ermöglicht es Ihnen, einen Teil des Algorithmus zu ändern, indem Sie einen Teil des Inhalts in der Unterklasse erweitern.
Das Strategiemuster basiert auf dem Kompositionsmechanismus: Sie können einen Teil des Verhaltens eines Objekts ändern, indem Sie unterschiedliche Strategien für das entsprechende Verhalten bereitstellen.
Vorlagenmethoden arbeiten auf Klassenebene, sind also statisch. Richtlinien wirken auf Objektebene und ermöglichen so die Änderung des Verhaltens zur Laufzeit.
Das obige ist der detaillierte Inhalt vonVerstehen Sie das Template-Methodenmuster von PHP-Entwurfsmustern in einem Artikel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

APHPDependencyInjectionContainerisatoolthatmanagesClass -Abhängigkeiten, EnhancingCodemodularität, Testbarkeit und Maschinenbarkeit.

Wählen Sie die Abhängigkeitsinjektion (DI) für große Anwendungen. Der Servicelocator ist für kleine Projekte oder Prototypen geeignet. 1) DI verbessert die Testbarkeit und Modularität des Codes durch Konstruktorinjektion. 2) Servicelocator erhält Dienstleistungen durch die Zentrumregistrierung, was bequem ist, aber zu einer Erhöhung der Codekupplung führen kann.

PhpapplicationscanbeoptimizedforspeedandefficiencyBy: 1) EnabgingOpcacheinphp.ini, 2) usePreparedStatementsWithpdoFordatabasequeries, 3) Ersatzloopswitharray_Filterandarray_mapfordataprozessing, 4) Konfigurieren von), 4), implementieren, 5)

PhpemailvalidationInvolvesthreesteps: 1) Formatvalidationusing -RegularexpressionStocheckTheemailformat; 2) DnsvalidationToensurethedomainhasavalidmxRecord;

TomakePhpapplicationsfaster, folgt der THESESTEPS: 1) UseOpCodeCaching LikeopcachetOstorePrecompiledScriptByteCode.2) MinimizedatabasequeriesByusedQueryCachingandefficiendexing.3) Hebel -FeaturesForbetTerCodeeffizienz.4) Implementierungspflichtiger Strategie

ToimProvePhpapplicationSpeed, folge theSeSteps: 1) enableOpCodeCachingWithAPCUToreducescriptexexexeTime.2) ImplementDatabaseQueryCachingusedpdotominimizedatabaseHits.3) UseHttp/2TomultiplexRequeTsReconneconneconneconneconneconneconnectionOverhead.4))

Die Abhängigkeitsinjektion (DI) verbessert die Testbarkeit von PHP -Code durch explizit transitive Abhängigkeiten signifikant. 1) DI -Entkopplungsklassen und spezifische Implementierungen machen Tests und Wartung flexibler. 2) Unter den drei Typen injiziert der Konstruktor explizite Expressionsabhängigkeiten, um den Zustand konsistent zu halten. 3) Verwenden Sie DI -Container, um komplexe Abhängigkeiten zu verwalten, um die Codequalität und die Entwicklungseffizienz zu verbessern.

DatabaseQueryoPtimizationInphpinvolvesseveralStrategieShancePerformance.1) selectonlynn -nötigesColumntededatatransfer.2) Verwenden Sie IndexingTospeedUpDatarErvieval.3) ImplementQueryCachingtoStoreresultsOffRequerien.4) Nützliche Stände


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Sicherer Prüfungsbrowser
Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.
