Factory Method Design Pattern

Intent

  • Definieren Sie eine Schnittstelle zum Erstellen eines Objekts, lassen Sie jedoch die Unterklassen entscheiden, welche Klasse instanziiert werden soll. Mit der Factory-Methode kann eine Klasse die Unterklasse auf Unterklassen verschieben.
  • Definieren eines „virtuellen“ Konstruktors.
  • Der Operator new wird als schädlich angesehen.

Problem

Ein Framework muss das Architekturmodell für eine Reihe von Anwendungen standardisieren, aber es einzelnen Anwendungen ermöglichen, ihre eigenen Domänenobjekte zu definieren und ihre Instanziierung bereitzustellen.

Diskussion

Mit der Factory-Methode werden Objekte erstellt, während mit der Template-Methode ein Algorithmus implementiert wird. Eine Oberklasse gibt das gesamte standardmäßige und generische Verhalten an (unter Verwendung reiner virtueller „Platzhalter“ für Erstellungsschritte) und delegiert dann die Erstellungsdetails an Unterklassen, die vom Client bereitgestellt werden.

Die Factory-Methode macht ein Design anpassbarer und nur wenig komplizierter. Andere Entwurfsmuster erfordern neue Klassen, während die Fabrikmethode nur eine neue Operation erfordert.

Benutzer verwenden häufig die Factory-Methode als Standardmethode zum Erstellen von Objekten. Dies ist jedoch nicht erforderlich, wenn: die Klasse, die instanziiert wird, niemals Änderungen oder Instanziierungen finden in einer Operation statt, die von Unterklassen leicht überschrieben werden kann (z. B. eine Initialisierungsoperation).

Die Factory-Methode ähnelt der Abstract Factory, jedoch ohne die Hervorhebungsfamilien.

Factory-Methoden werden routinemäßig von einem Architektur-Framework spezifiziert und dann vom Benutzer des Frameworks implementiert.

Struktur

Die in der Viererbande (unten) diskutierte Implementierung der Factory-Methode überschneidet sich weitgehend mit das der abstrakten Fabrik. Aus diesem Grund konzentriert sich die Präsentation in diesem Kapitel auf den Ansatz, der seitdem populär geworden ist.

Eine zunehmend populäre Definition von Fabrik Die Methode ist: eine static -Methode einer Klasse, die ein Objekt dieses Klassentyps zurückgibt. Im Gegensatz zu einem Konstruktor kann das zurückgegebene Objekt jedoch eine Instanz einer Unterklasse sein. Unlikea-Konstruktor, ein Vorhandenes Objekt kann anstelle eines neu erstellten Objekts wiederverwendet werden. Im Gegensatz zu einem Konstruktor haben Factory-Methodenscans unterschiedliche und aussagekräftigere Namen (z. B. Color.make_RGB_color(float red, float green, float blue) und Color.make_HSB_color(float hue, float saturation, float brightness)

Der Client ist vollständig von den Implementierungsdetails abgeleiteter Klassen entkoppelt. Die polymorphe Erstellung ist jetzt möglich.

Beispiel

Die Factory-Methode definiert eine Schnittstelle zum Erstellen von Objekten, aber die Unterklassen entscheiden, welche Klassen instanziiert werden sollen. Spritzgusspressen demonstrieren Dies Muster. Hersteller von Kunststoffspielzeug verarbeiten Kunststoffformpulver und spritzen den Kunststoff in Formen mit den gewünschten Formen. Die Klasse des Spielzeugs (Auto, Actionfigur usw.) wird durch die Form bestimmt.

Checkliste

  1. Wenn Sie eine Vererbungshierarchie haben, die Polymorphismus ausübt, sollten Sie eine polymorphe Erstellungsfunktion hinzufügen, indem Sie in der Basisklasse eine static -Factory-Methode definieren.
  2. Entwerfen Sie die Argumente für die Factory-Methode. Welche Eigenschaften oder Merkmale sind erforderlich und ausreichend, um die richtige abgeleitete Klasse für die Instanziierung zu identifizieren?
  3. Entwerfen Sie einen internen „Objektpool“, mit dem Objekte wiederverwendet werden können, anstatt von Grund auf neu erstellt zu werden.
  4. Überlegen Sie Erstellen aller Konstruktoren private oder protected.

Faustregeln

  • Zusammenfassung Factory-Klassen werden häufig mit Factory-Methoden implementiert, können jedoch auch mit Prototype implementiert werden.
  • Factory-Methoden werden normalerweise in Vorlagenmethoden aufgerufen.
  • Factory-Methode: Erstellung durch Vererbung . Prototyp: Erstellung durch Delegierung.
  • Oft beginnen Entwürfe mit der Factory-Methode (weniger kompliziert, anpassbarer, Unterklassen vermehren sich) und entwickeln sich zu AbstractFactory, Prototype oder Builder (flexibler, komplexer), wenn der Designer herausfindet, wo mehr Flexibilität ist erforderlich.
  • Der Prototyp erfordert keine Unterklasse, aber eine Initialisierungsoperation. Die Factory-Methode erfordert eine Unterklasse, erfordert jedoch keine Initialisierung.
  • Der Vorteil einer Factory-Methode ist dass es die gleiche Instanz mehrmals zurückgeben kann oder eine Unterklasse anstelle eines Objekts dieses genauen Typs zurückgeben kann.
  • Einige Befürworter der Factory-Methode empfehlen dies als eine Frage des Sprachdesigns (oder wenn dies fehlschlägt, als eine Frage des Stils ) absolut alle Konstruktoren sollten privat oder geschützt sein. Es geht niemanden etwas an, ob eine Klasse ein neues Objekt herstellt oder ein altes wiederverwertet.
  • Der Operator new gilt als schädlich. Es gibt einen Unterschied zwischen dem Anfordern eines Objekts und dem Erstellen eines Objekts. Der Operator new erstellt immer ein Objekt und kann die Objekterstellung nicht kapseln.Eine Factory-Methode erzwingt diese Kapselung und ermöglicht das Anfordern eines Objekts ohne untrennbare Kopplung mit dem Erstellungsvorgang.

Unterstützen Sie unsere kostenlose Website und besitzen Sie das eBook!

  • 22 Entwurfsmuster und 8 Prinzipien, die ausführlich erklärt wurden
  • 406 gut strukturierte, einfach zu lesende, jargonfreie Seiten
  • 228 klare und hilfreiche Abbildungen und Diagramme
  • Ein Archiv mit Codebeispielen in 4 Sprachen
  • Alle unterstützten Geräte: EPUB / MOBI / PDF-Formate

Weitere Informationen …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.