Erzeugungsmuster – Teil 1: Abstract Factory

Was sind Erzeugungsmuster?

Erzeugungsmuster (auf Englisch: Creational Patterns) sind spezielle Design Patterns, die für die Erstellung/Erzeugung von Objekten eingesetzt werden. Es gibt mehrere Creational Patterns und jedes Pattern ist für eine spezifische Situation besser eingerichtet, obwohl alle Patterns den gleichen Zweck erreichen.

Die Standard Strategie für die Definition der Erstellung von Objekten ist zu simple und kann zu Design Problemen führen und kann sehr schnell den Entwickler überfördern. Creational Patterns helfen Komplexe Erstellungslogik zu vereinfachen und zu verallgemeinern.

Die bekannteste Creational Patterns:

  • Abstract Factory
  • Builder
  • Factory Method
  • Object Pool
  • Prototype
  • Singleton

Abstract Factory

Zweck

  • Eine Schnittstelle für die Erstellung von Objektgruppen, die stark verkoppelt sind, ohne die konkreten Klassen zu spezifizieren, zu Verfügung stellen
  • Eine Hierarchie von Objekten für möglichst viele Plattformen erstellen zu können
  • Auf den «new» Operator, wenn möglich, zu verzichten

Problematik

Wenn eine Applikation für mehrere Plattformen entwickelt wird, muss sie verschiedene Ansätze für jede Plattform implementieren. Wenn keine gute Trennung dieser Logik eingeführt wird, fangt den Code an viele «#ifdef» Fälle zu haben. Wegen dieses Falls wird die Applikation sehr viel Code für jeder Plattformoption besitzen, was in der Zukunft sehr schwierig zu verhalten wird.

Struktur

Die Abstract Factory Pattern definiert einen Factory Methode pro Produkt. Jede Factory Methode verschliesst den «new» Operator und die konkreten plattformspezifischen Klassen. Jede Plattform besitzt ihre spezifische Factory.

structure

Beispiel

Wir haben eine Applikation für Windows und Apple Geräte entwickelt, leider verhalten sich die GUIs der beiden Plattformen anders und wir müssen diese Unterschiede im Code einbegriffen. Dafür können wir eine Abstract Factory für die verschiedene UI Elemente, jeweils für Windows Betriebssysteme und OSX Betriebssysteme. Diese Factories können die einzelnen Elemente für ihren Betriebssystem erstellen und wir können diese erzeugen und beliebig einrichten.

example

Checkliste für die Einsetzung

  1. Entscheiden ob die Erstellung von plattformspezifischen Produkten scher zu verwalten wird
  2. Eine Matrix von Plattformen im Gegensatz zu Produkten erstellen
  3. Eine Factory Interface definieren, die aus einen Factory Method für jedem Produkt besteht.
  4. Eine Klasse für jede Plattform definieren, die die Factory Interface implementiert und alle Referenzen zu den «new» Operator abstrahiert.
  5. Den Client soll keine «new» Referenzen besitzen, sonst die Erzeugungsmethoden der Factories benutzen
  6. Schön, sauberes und strukturiertes Code geniessen 😊

Analogie & Zusammenfassung

Die Abstract Factory Pattern funktioniert wie den CEO von einer Fabrikkette und durch ihn können wir ein spezifisches Produkt von seiner, für diesem Arbeit besser eingerichtete Fabrik, erzeugen / erstellen lassen. Somit haben wir einen zentralen Punkt, den die Entscheidungen für die Erstellung des Produktes übernehmen kann. Dieser Strategie befreit uns von repetitivem Code, den immer für die Erstellung eines Objektes geschrieben werden muss.