Einführung und Verwendung von Factory-Pattern-Entwurfsmustern
Einfaches Factory-Muster
Das einfache Factory-Muster ist das Klassenerstellungsmuster, auch statisches Factory-Methodenmuster genannt. Das einfache Factory-Muster verwendet ein Factory-Objekt, um zu bestimmen, welche Produktklasseninstanzen produziert werden sollen.
Warum das einfache Fabrikmuster verwenden?
Der Grund ist einfach: Entkopplung.
LOL-Szenenanalyse:
Derzeit gibt es in LOL mehr als 100 Helden und die Fähigkeiten jedes Charakters sind unterschiedlich Die Implementierung bestimmter Helden muss unterschiedlich sein.
Aber die Fähigkeiten jedes Helden sind die vier Grundfähigkeiten Q, W, E, R und die Beschwörerfähigkeiten D und F.
Obwohl die Die ausgewählten Helden sind unterschiedlich. Der Rest des Spiels sollte genau gleich sein. Es ist unmöglich, die Logik anderer gemeinsamer Teile vollständig zu ändern, je nachdem, welchen Helden wir auswählen!
Wie man ein solches Anwendungsszenario umsetzt
Summoner Skill Constant Class
public class SummonerSkillName { public static final String FLASH = "Flash";//闪现 public static final String HEAL = "Heal";//治疗 public static final String IGNITE = "Ignite";//引燃 public static final String REVIVE = "Revive";//惩戒 public static final String TELEPORT = "Teleport";//传送 public static final String EXHAUST = "ExhaustSS";//虚弱 }
Summoner Skill Interface
<span style="color: #0000ff">public</span> <span style="color: #0000ff">interface</span><span style="color: #000000"> SummonerSkill { </span><span style="color: #0000ff">void</span><span style="color: #000000"> release();//释放技能 }<br></span>
Summoner Skill Implementation Class 1: Flash
public class FlashSS implements SummonerSkill { public static final String NAME = "闪现"; @Override public void release() { System.out.println("闪现"); } }
Beschwörer-Fertigkeitsimplementierung Kategorie 2: Zündung
public class IgniteSS implements SummonerSkill { public static final String NAME = "引燃"; @Override public void releaseSS() { System.out.println("引燃"); } }
Beschwörer-Fertigkeitsfabrik
public class SummonerSkillFactory { public static SummonerSkill getSkillSS(String ssName) throws Exception { SummonerSkill ss;if (ssName.equals(SummonerSkillName.FLASH)) { ss = new FlashSS(); } else if (ssName.equals(SummonerSkillName.TELEPORT)) { ss = new TeleportSS(); } else if (ssName.equals(SummonerSkillName.HEAL)) { ss = new HealSS(); } else if (ssName.equals(SummonerSkillName.IGNITE)) { ss = new IgniteSS(); } else if (ssName.equals(SummonerSkillName.EXHAUST)) { ss = new ExhaustSS(); } else { ss = new ReviveSS(); } return ss; } }
Verbesserte Fabrik, Reflexion verwenden:
public class SummonerSkillFactory { private static final String CLASS_NAME_SUFFIX = "SS"; public static SummonerSkill getSkillSS(String ssName) throws Exception { String className = ssName + classNameSuffix; String packageName = SummonerSkill.class.getPackage().getName(); SummonerSkill ss = (SummonerSkill) Class.forName(packageName + "." + className).newInstance(); return ss; } }
Stellen Sie sich vor, wie schön das Bild wäre, wenn mehr als 100 Helden auch sonst verwendet würden~
Die Vorteile davon sind nicht nur die Menge an zu schreibendem Code ist viel kleiner und vorausgesetzt, dass neue Beschwörerfähigkeiten hinzugefügt werden, muss der Werkscode nicht geändert werden und das Öffnungs- und Schließprinzip wird befolgt.
public class LeagueClient { @Test public void selectHero() throws Exception { SummonerSkill flash = SummonerSkillFactory.getSkillSS(SummonerSkillName.FLASH); SummonerSkill ignite = SummonerSkillFactory.getSkillSS(SummonerSkillName.IGNITE); }
Der Fokus des einfachen Fabrikmusters oder Fabrikmusters liegt nicht darauf, wie die erforderlichen Klassen in der Fabrik produziert werden, Es geht darum, die Herstellung von Produkten vom Konsum von Produkten zu trennen.
Ich habe zuvor if...else if...else und Reflection verwendet. Zusätzlich zu diesen Methoden gibt es andere Möglichkeiten, Produkte zu erstellen, z. B. die Übergabe der Identifikation eines bestimmten Produkts und das Gehen zu Erfragen Sie die Datenbank anhand dieser Identifikation.
Vor- und Nachteile des Fabrikmodells
Vorteile:
1. Optimieren Sie einfach die Softwarearchitektur und klären Sie deren jeweilige Funktionen und Rechte des Moduls
2. Durch die Factory-Klasse muss die Außenwelt nicht direkt bestimmte Produktobjekte erstellen, sondern muss sich nur um den Verbrauch kümmern So erstellen Sie Objekte intern
Nachteile:
1. Die gesamte Erstellungslogik des einfachen Factory-Musters ist in einer Factory-Klasse konzentriert. Wenn Sie eine neue Klasse hinzufügen müssen, müssen Sie die Factory-Klasse ändern
2 Da die Anzahl spezifischer Produkte im einfachen Factory-Modell vor der Verbesserung weiter zunimmt, kann es erforderlich sein, verschiedene Instanzen davon zu erstellen Die gemeinsame Klasse nach unterschiedlichen Bedingungen ist mit der Beurteilung bestimmter Produkttypen verknüpft, was es schwierig macht, die Verbreitung von Funktionsmodulen zu vermeiden, was sich nachteilig auf die Systemwartung und -erweiterung auswirkt
3. Das Der verbesserte einfache Factory-Modus verwendet hauptsächlich Reflexion, die weniger effizient ist
Das obige ist der detaillierte Inhalt vonEinführung und Verwendung von Factory-Pattern-Entwurfsmustern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

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

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Im Java-Framework besteht der Unterschied zwischen Entwurfsmustern und Architekturmustern darin, dass Entwurfsmuster abstrakte Lösungen für häufige Probleme beim Softwaredesign definieren und sich dabei auf die Interaktion zwischen Klassen und Objekten konzentrieren, beispielsweise Fabrikmuster. Architekturmuster definieren die Beziehung zwischen Systemstrukturen und Modulen und konzentrieren sich auf die Organisation und Interaktion von Systemkomponenten, wie z. B. eine geschichtete Architektur.

Das Adaptermuster ist ein strukturelles Entwurfsmuster, das die Zusammenarbeit inkompatibler Objekte ermöglicht. Es wandelt eine Schnittstelle in eine andere um, sodass die Objekte reibungslos interagieren können. Der Objektadapter implementiert das Adaptermuster, indem er ein Adapterobjekt erstellt, das das angepasste Objekt enthält, und die Zielschnittstelle implementiert. In einem praktischen Fall kann der Client (z. B. MediaPlayer) über den Adaptermodus Medien im erweiterten Format (z. B. VLC) abspielen, obwohl er selbst nur normale Medienformate (z. B. MP3) unterstützt.

Das Dekoratormuster ist ein strukturelles Entwurfsmuster, das das dynamische Hinzufügen von Objektfunktionen ermöglicht, ohne die ursprüngliche Klasse zu ändern. Es wird durch die Zusammenarbeit von abstrakten Komponenten, konkreten Komponenten, abstrakten Dekoratoren und konkreten Dekoratoren implementiert und kann Klassenfunktionen flexibel erweitern, um sich ändernden Anforderungen gerecht zu werden. In diesem Beispiel werden Milch- und Mokka-Dekoratoren zu Espresso für einen Gesamtpreis von 2,29 $ hinzugefügt, was die Leistungsfähigkeit des Dekoratormusters bei der dynamischen Änderung des Verhaltens von Objekten demonstriert.

1. Factory-Muster: Trennen Sie Objekterstellung und Geschäftslogik und erstellen Sie Objekte bestimmter Typen über Factory-Klassen. 2. Beobachtermuster: Ermöglicht Subjektobjekten, Beobachterobjekte über ihre Zustandsänderungen zu benachrichtigen, wodurch eine lose Kopplung und ein Beobachtermuster erreicht werden.

Entwurfsmuster lösen Herausforderungen bei der Codewartung, indem sie wiederverwendbare und erweiterbare Lösungen bereitstellen: Beobachtermuster: Ermöglicht Objekten, Ereignisse zu abonnieren und Benachrichtigungen zu erhalten, wenn sie auftreten. Factory-Muster: Bietet eine zentralisierte Möglichkeit, Objekte zu erstellen, ohne auf konkrete Klassen angewiesen zu sein. Singleton-Muster: stellt sicher, dass eine Klasse nur eine Instanz hat, die zum Erstellen global zugänglicher Objekte verwendet wird.

Zu den Vorteilen der Verwendung von Entwurfsmustern in Java-Frameworks gehören: verbesserte Lesbarkeit, Wartbarkeit und Skalierbarkeit des Codes. Zu den Nachteilen gehören Komplexität, Leistungsaufwand und eine steile Lernkurve aufgrund übermäßiger Nutzung. Praktischer Fall: Der Proxy-Modus wird zum verzögerten Laden von Objekten verwendet. Setzen Sie Entwurfsmuster mit Bedacht ein, um ihre Vorteile zu nutzen und ihre Nachteile zu minimieren.

Das Guice-Framework wendet eine Reihe von Entwurfsmustern an, darunter: Singleton-Muster: Durch die @Singleton-Annotation wird sichergestellt, dass eine Klasse nur eine Instanz hat. Factory-Methodenmuster: Erstellen Sie eine Factory-Methode über die Annotation @Provides und rufen Sie die Objektinstanz während der Abhängigkeitsinjektion ab. Strategiemodus: Kapseln Sie den Algorithmus in verschiedene Strategieklassen und geben Sie die spezifische Strategie über die Annotation @Named an.

TDD wird verwendet, um hochwertigen PHP-Code zu schreiben. Die Schritte umfassen: Testfälle schreiben, die erwartete Funktionalität beschreiben und sie zum Scheitern bringen. Schreiben Sie Code so, dass nur die Testfälle ohne übermäßige Optimierung oder detailliertes Design erfolgreich sind. Nachdem die Testfälle bestanden wurden, optimieren und überarbeiten Sie den Code, um die Lesbarkeit, Wartbarkeit und Skalierbarkeit zu verbessern.
