Definition: Das abstrakte Fabrikmuster bietet eine Schnittstelle zum Erstellen von Familien verwandter oder abhängiger Objekte, ohne deren konkrete Klassen anzugeben. Dieses Muster ist besonders nützlich, wenn ein System unabhängig davon sein muss, wie seine Produkte erstellt, komponiert und dargestellt werden.
Beispiel Verwendung: Stellen Sie sich vor, eine Simulationssoftware zu entwickeln, die unterschiedliche Umgebungen darstellt (Land, Meer, Luft). Mit dem abstrakten Fabrikmuster können Sie eine Fabrikschnittstelle mit Methoden definieren, um verschiedene Arten von Tieren und Pflanzen zu erstellen, und dann verschiedene konkrete Fabriken für jede Umgebung implementieren, wobei jedes weiß, wie Objekte für diese Umgebung spezifisch sind.
Definition: Das Factory -Methode -Muster definiert eine Schnittstelle zum Erstellen eines Objekts, lässt jedoch Unterklassen entscheiden, welche Klasse instanziiert werden soll. Dieses Muster delegiert die Verantwortung der Objektinstanziierung einer Unterklasse und fördert die lose Kopplung.
Beispiel Verwendung: Eine Dokumentverwaltungsanwendung kann die Werksmethode verwenden, um verschiedene Arten von Dokumenten (Text, Diagramme, Präsentationen) zu erstellen. Jede Art von Dokument verfügt über seine konkrete Klasse, und die Werksmethode in der Basisklasse entscheidet, welches Dokument auf der Grundlage der Benutzereingabe erstellt werden soll, wodurch der Clientcode aus konkreten Dokumentklassen isoliert wird.
Definition: Das Builder -Muster trennt die Konstruktion eines komplexen Objekts von seiner Darstellung und ermöglicht die gleiche Konstruktion für verschiedene Darstellungen. Dieses Muster ist nützlich, wenn ein Objekt in mehreren Schritten erstellt werden muss und der Konstruktionsprozess für verschiedene Darstellungen gleich sein muss.
Beispiel Verwendung: Betrachten Sie einen Autobauer, der verschiedene Arten von Autos erstellen kann (Sport, SUV, Cabrio). Mit dem Bauunternehmer kann der Bauprozess dieser Autos in verschiedene Schritte (Gebäude Chassis, Motor, Innenräume) standardisiert werden, während die spezifischen Details jedes Autotyps durch verschiedene Betonbauer behandelt werden.
Definition: Die Kette des Verantwortungsmusters ermöglicht das Bestehen einer Anfrage entlang einer Kette von Handlern. Jeder Handler entscheidet, ob die Anfrage verarbeitet oder an den nächsten Handler in der Kette weitergeleitet werden soll.
Beispielverwendung: In einem Helpdesk -System kann eine Support -Anfrage verschiedene technische Support -Ebenen durchlaufen. Jede Stufe untersucht die Anfrage und entscheidet, ob sie sie verarbeiten oder an die nächste Stufe übergeben kann. Dadurch wird vermieden, dass der Anforderungssender mit dem spezifischen Empfänger eine Verantwortung unter verschiedenen Objekten verteilt.
Definition: Das Befehlsmuster verwandelt eine Anforderung in ein unabhängiges Objekt, das alle erforderlichen Informationen enthält, um die Aktion auszuführen. Dies ermöglicht die Parametrisierung von Methoden mit unterschiedlichen Anforderungen, verzögert oder stillt die Ausführung einer Anforderung und unterstützt den Vorgänger.
Beispielverwendung: In einer Home -Automatisierungsanwendung können Befehle wie Ein-/Aus -Lichter oder das Einstellen des Thermostats in Befehlsobjekten eingekapselt werden. Diese Befehle können von verschiedenen Geräten wie Smartphones oder Tablets gesendet und bei Bedarf geplant oder rückgängig gemacht werden.
Definition: Das Prototypmuster ermöglicht das Kopieren vorhandener Objekte, ohne den Code von ihren Klassen abhängig zu machen. Jede prototypisierte Klasse implementiert die Prototyp -Schnittstelle, die eine Methode zum Klon selbst bietet.
Beispiel Verwendung: In einem Spiel kann in einer Szene anstatt Objekte von Grund auf neu zu erstellen, ein "Prototyp" -Objekt kloniert werden, um identische Kopien zu erstellen. Dies ist besonders nützlich für Spielszenarien, in denen das Erstellen und Zerstören vieler ähnlicher Objekte leistungsintensiv sein kann.
Definition: Das Memento -Muster ermöglicht das Speichern und Wiederherstellen des vorherigen Zustands eines Objekts, ohne die Details seiner internen Implementierung anzugeben. Dieses Muster ist nützlich für die Implementierung von Funktionen wie Rückgängigmachen in Anwendungen, die die Möglichkeit erfordern, in frühere Zustände zurückzukehren.
Beispiel Verwendung: Stellen Sie sich vor, Sie entwickeln einen Texteditor, mit dem Benutzer Textänderungen rückgängig machen können. Jedes Mal, wenn eine bedeutende Bearbeitung vorgenommen wird, wird der Staat des Herausgebers in einem Erinnerungsobjekt gespeichert. Wenn der Benutzer die Änderungen rückgängig machen möchte, kann der Editor den Status von einem dieser Memento -Objekte wiederherstellen und den Text in seinen vorherigen Zustand zurückkehren.
Definition: Das Mediatormuster definiert ein Objekt, das komplexe Kommunikation und Abhängigkeiten zwischen verbundenen Objekten zentralisiert, lose Kopplung fördert und verhindern, dass Objekte direkt aufeinander verweisen. Dies ermöglicht einen besseren Umgang mit komplexen Interaktionen und verbessert die Wartbarkeit der Code.
Beispielverwendung: Betrachten Sie einen Flugverkehrskontrollantrag. Anstatt jedem Flugzeug zu erlauben, direkt mit allen anderen zu kommunizieren (ein extrem komplexes System erzeugen), übernimmt ein Mediator - in diesem Fall der Steuerturm - alle Kommunikation. Flugzeuge kommunizieren nur mit dem Kontrollturm, der dann die Aktionen jedes Flugzeugs lenkt, z. B. wann und wo sie landen sollen.
Definition: Das Muster der Vorlagenmethode definiert das Skelett eines Algorithmus in einer Methode und verschoben einige Schritte, die durch Unterklassen ausgeführt werden sollen. Dies ermöglicht die Neudefinition bestimmter Schritte eines Algorithmus, ohne die Struktur des Algorithmus zu ändern.
Beispiel Verwendung: Denken Sie an ein automatisiertes Testframework. Die Vorlagenmethode kann verwendet werden, um eine Standard -Teststruktur zu definieren, wobei die Vorlagenmethode den Testausführungsfluss (Einrichtung, Ausführung, Aufräumarbeiten) festlegt. Spezifische Testunterklassen können dann jeden Schritt durch Implementieren von Methoden für die Einrichtung, die tatsächliche Testausführung und die Bereinigungsvorgänge nach dem Test anpassen.
Definition: Das Beobachtermuster stellt eine Eins-zu-Viele-Beziehung zwischen Objekten her, sodass bei einem Objekt den Status ändert, alle seine Angehörigen automatisch benachrichtigt und aktualisiert werden. Dieses Muster ist besonders nützlich für die Implementierung verteilter Ereignisbenachrichtigungssysteme, bei denen sich Änderungen an einem Zustand in Echtzeit in anderen Systemen oder Komponenten widerspiegeln müssen.
Beispiel Verwendung: Betrachten Sie ein Klimamanagementsystem in einem intelligenten Gebäude. Temperatursensoren (Verleger) überwachen die Umgebung kontinuierlich und senden bei erheblichen Änderungen Aktualisierungen an verschiedene Geräte (Beobachter) wie Klimaanlagen und Heizsysteme, die sich entsprechend anpassen, um die optimale Temperatur aufrechtzuerhalten. Auf diese Weise kann das Klimakontrollsystem ohne direkte Intervention dynamisch auf Umgebungsbedingungen reagieren, um Komfort und Energieeffizienz zu gewährleisten.
Definition: Das Statusmuster ermöglicht es einem Objekt, sein Verhalten zu ändern, wenn sich sein interner Zustand ändert. Es sieht so aus, als ob das Objekt seine Klasse ändert. Dieses Muster ist nützlich, um komplexe Zustandsänderungssituationen zu behandeln und die Notwendigkeit von Verzweigungsbedingungen (IF-ELSE oder Switch) im Code zu verringern.
Beispiel Verwendung: Stellen Sie sich vor, eine Anwendung zur Verwaltung des Lebenszyklus einer Online -Bestellung zu entwickeln. Die Bestellung kann in verschiedenen Staaten wie "Verarbeitung", "versandt", "geliefert" sein. Mit dem Zustandsmuster können Sie eine abstrakte OrderState -Klasse mit Methoden wie Process (), Ship () und Deliver () definieren. Jeder konkrete Staat (z. B. RecantingState, ShippedState, DeliveredState) wird diese Methoden implementieren, um staatliche Übergänge angemessen zu behandeln. Der Kontext (z. B. die Auftragsklasse) verwaltet einen Verweis auf den aktuellen Zustand und delegiert staatliche Operationen an konkrete Zustandsobjekte, wodurch das Verhalten der Reihenfolge aufgrund seines aktuellen Zustands ohne direkte Intervention vom Client -Code geändert wird.
Definition: Das Strategiemuster ist ein Verhaltensmuster, das es ermöglicht, eine Familie von Algorithmen zu definieren, sie in einer dedizierten Klasse zusammenzufassen und Objekte in diesem Kontext austauschbar zu machen. Dieser Ansatz ermöglicht unterschiedliche Algorithmen unabhängig von den Kunden, die sie verwenden.
Beispielnutzung: Stellen Sie sich eine E-Commerce-Anwendung vor, die je nach Land des Kunden unterschiedliche Steuerberechnungsstrategien umsetzen muss. Mit dem Strategiemuster können Sie eine Taxstrategie -Schnittstelle mit einer Calculatetax () -Methode definieren und dann verschiedene konkrete Strategien für verschiedene Steuerkontexte wie Ustaxstrategie, Eutaxstrategy und Asiataxstrategy implementieren.
Definition: Das Iteratormuster bietet eine Möglichkeit, auf die Elemente eines sequentiellen Aggregatsobjekts zuzugreifen, ohne seine zugrunde liegende Darstellung aufzudecken. Dieses Muster ist besonders nützlich, um unterschiedliche Traversalmodi einer Sammlung zu verwalten.
Beispiel Verwendung: Betrachten Sie eine Sammlung von Daten wie einem Baum oder einem Diagramm. Mit dem Iteratormuster können Sie einen einheitlichen Zugriff auf die Elemente dieser komplexen Datenstrukturen gewähren, ohne dass der Client -Code die Unterschiede zwischen den verschiedenen Strukturen verarbeiten muss. Zum Beispiel können Sie verschiedene Iteratoren wie Depthfirstiterator und Breadthfirstiterator haben, um ein Diagramm zu durchqueren.
Definition: Das Besuchermuster ermöglicht die Trennung eines Algorithmus von der Struktur der Objekte, auf denen er betrieben wird. Dieses Muster bietet eine Möglichkeit, vorhandenen Klassen neue Operationen hinzuzufügen, ohne sie zu ändern.
Beispielnutzung: Stellen Sie sich vor, Sie haben ein Kundenmanagementsystem in einem Versicherungskontext. Das Besuchermuster ermöglicht es einem Objekt, eine Kundenliste zu durchqueren und ihnen personalisierte Nachrichten bezüglich der Versicherung zu senden.
Definition: Das Adaptermuster ermöglicht inkompatible Schnittstellen zusammen. Es fungiert als Brücke zwischen zwei inkompatiblen Schnittstellen, indem es die Schnittstelle einer vorhandenen Klasse in eine andere von den Clients erwartete Schnittstelle verwandelt.
Beispiel Verwendung: Angenommen, Sie haben eine neue Schnittstelle zum Rendern von Diagrammen, aber eine vorhandene Bibliothek bietet ähnliche Funktionen mit einer anderen Schnittstelle. Anstatt die vorhandene Bibliothek neu zu schreiben, können Sie einen Adapter verwenden, um die vorhandene Bibliothek mit der neuen Rendering -Schnittstelle zum Laufen zu bringen und so eine nahtlose Integration zu ermöglichen.
Definition: Das Brückenmuster ist ein strukturelles Muster, das eine Abstraktion von seiner Implementierung trennt und es ihnen ermöglicht, unabhängig zu variieren. Es wird verwendet, um eine große Klasse oder eine Reihe eng verwandter Klassen in zwei separate Hierarchien zu unterteilen - Abstraktion und Implementierung -, die unabhängig voneinander entwickelt und geändert werden können.
Beispiel Verwendung: In einer Pizza -Lieferanwendung gibt es verschiedene Arten von Pizzas mit jeweils einzigartigem Geschmack und verschiedene Arten von Restaurants mit unterschiedlichen Kochstilen. Wenn eine Bestellung für eine Pizza aufgegeben wird, verwendet die Anwendung das Brückenmuster, um sicherzustellen, dass die Pizza gemäß den Vorlieben des Kunden komponiert und nach dem spezifischen Stil des ausgewählten Restaurants gekocht wird. Auf diese Weise erleichtert das Brückenmuster die Integration zwischen den verschiedenen Arten von Pizzen und den verschiedenen Kochstilen der Restaurants und ermöglicht eine effiziente und personalisierte Lieferung.
Definition: Das zusammengesetzte Muster ist ein strukturelles Muster, das es ermöglicht, Gruppen von Objekten und individuellen Objekten einheitlich zu behandeln. Dieses Muster organisiert Objekte zu einer Baumstruktur, um Teil-Ganze-Hierarchien darzustellen. Es ermöglicht Benutzern, mit einzelnen Objekten und Objektzusammensetzungen einheitlich zu arbeiten.
Beispiel Verwendung: Stellen Sie sich vor, Sie haben ein Geschenkbox -Management -System mit einzelnen Gegenständen und anderen Boxen. Der Kunde erstellt eine Hauptbox und fügt einige Elemente wie Bücher und Videospiele sowie eine kleinere Box mit einem Buch hinzu. Der Gesamtpreis aller Artikel im Hauptfeld wird dann berechnet. Das zusammengesetzte Muster ermöglicht es, einzelne Objekte und Objektzusammensetzungen auf die gleiche Weise zu behandeln, den Code zu vereinfachen und die Operationen sowohl für einzelne Objekte als auch für Gruppen von Objekten gleichmäßig zu machen.
Definition: Das Dekorationsmuster ist ein strukturelles Muster, mit dem zusätzliche Verantwortlichkeiten zu Objekten dynamisch hinzugefügt werden können, ohne ihre Struktur durch Vererbung zu verändern. Dieses Muster bietet eine flexible Alternative zum Ableiten erweiterter Klassen zur Erweiterung der Funktionalität.
Beispiel Verwendung: Stellen Sie sich vor, ein Benachrichtigungssystem zu haben. Das Dekorationsmuster ermöglicht die Erweiterung der Funktionalität verschiedener sozialer Plattformen. Auf diese Weise können Benachrichtigungen über verschiedene Kanäle gesendet werden, ohne den Code direkt zu ändern.
Definition: Das Fassadenmuster ist ein strukturelles Muster, das eine einheitliche Schnittstelle zu einer Reihe von Schnittstellen in einem Subsystem liefert. Dieses Muster definiert eine Schnittstelle auf hoher Ebene, die das Subsystem erleichtert.
Beispiel Verwendung: Betrachten Sie ein komplexes System zum Verwalten von Multimedia -Geräten in einem Auto, das Subsysteme für Audio-, Video- und Bluetooth -Konnektivität enthält. Eine Fassade kann eine einfache Schnittstelle anbieten, um Musik zu starten, Video zu stoppen oder Anrufe zu verwalten und die Komplexität und die Abhängigkeiten zwischen Subsystemen zu verbergen.
Definition: Das Fliegengewichtsmuster ist ein strukturelles Muster, das die Freigabe verwendet, um eine große Anzahl feinkörniger Objekte effizient zu unterstützen. Es ist besonders nützlich, wenn ein großer Teil des Staates eines Objekts geteilt und außerhalb dessen gemacht werden kann.
Beispiel Verwendung: Stellen Sie sich vor, Sie hätten eine Anwendung zum Verwalten von Büchern. Es verwendet eine Fabrik, um Instanzen von Buchtypen zu erstellen und zu teilen. Auf diese Weise wird das gleiche Objekt zurückgegeben, anstatt jedes Mal eine neue zu erstellen, wenn dieselbe Buchstyp mehrmals angefordert wird. Dies spart Speicher und verbessert die Gesamtleistung der Anwendung.
Definition: Das Proxy -Muster bietet einen Ersatz oder Platzhalter für ein anderes Objekt, um den Zugriff darauf zu steuern. Dieses Muster wird verwendet, wenn Sie Einschränkungen für den Zugriff auf ein Objekt, das faule Laden oder die transparente Lokalisierung eines Objekts in einer verteilten Umgebung auferlegen möchten.
Beispiel Verwendung: Bei der Zugriffskontrolle für ein Dateisystem kann ein Proxy verwendet werden, um die Benutzeroperationen in Dateien zu steuern. Der Proxy überprüft die Anmeldeinformationen eines Benutzers, bevor er den tatsächlichen Zugriff auf die Datei zulässt und zusätzliche Sicherheit bietet.
Definition: Das Singleton -Muster ist ein Kreationmuster, das sicherstellt, dass eine Klasse nur eine Instanz hat und gleichzeitig einen globalen Zugriffspunkt für diese Instanz bietet.
Beispiel Verwendung: In einer Anwendung kann das Singleton -Muster verwendet werden, um die Konfiguration der Anwendung zu verwalten. Ein Singleton -Objekt kann alle Konfigurationen enthalten, die während der Ausführung der Anwendung konstant bleiben und aus verschiedenen Teilen des Programms gelesen werden können.