Bryan Albrecht

Factory Pattern

In diesem Blogeintrag möchte ich gerne näher auf das Factory Pattern eingehen. Oftmals wird dieses Pattern bereits unbewusst beim Programmieren eingesetzt. Dieser Eintrag soll genauer erläutern, wie das Pattern aufgebaut ist und in was für Beispielen eine Anwendung sinnvoll wäre.

Anwendung ohne Factory Pattern

Nehmen wir an, dass wir ein Kartenspiel programmieren möchten, bei welchem jede Karte eine eigene Funktion aufweist. Nun muss für jeder dieser Kartentypen eine Klasse erstellt werden. Als Basisklasse wird die «Card» Klasse verwendet.

Klassendiagram

Im Konstruktor unserer Game Klasse werden nun mehre Instanzen von den Karten erstellt um ein ganzes Deck zu bekommen. Dies könnte etwa so aussehen:

  1. deck.Add(new QuestionCard { Value = 1 });
  2. deck.Add(new QuestionCard { Value = 2 });
  3. deck.Add(new QuestionCard { Value = 3 });
  4. deck.Add(new ActionCard { Value = 4 });
  5. deck.Add(new ActionCard { Value = 5 });
  6. deck.Add(new ActionCard { Value = 6 });

Anwendung mit Factory Pattern

Die Game Klasse sollte eigentlich ausschliesslich fürs Abhandeln des Spiels zuständig sein. Das neuerstellen eines Kartendecks gehört also nicht zu dessen Aufgabenbereich.

Um genau diese Arbeit der Klasse abzunehmen, wird eine Factory Klasse erstellt. Die Factory Klasse soll in diesem Fall eine Methode enthalten, welche ein Vollständiges Deck zurückgibt. Diese Klasse sieht wie folgt aus:

  1. public class CardFactory
  2. {
  3.     public List<Card> GetNewDeck()
  4.  {
  5.         List<Card> deck = new List<Card>();
  6.         deck.Add(new QuestionCard { Value = 1 });
  7.         deck.Add(new QuestionCard { Value = 1 });
  8.         deck.Add(new QuestionCard { Value = 1 });
  9.         deck.Add(new ActionCard { Value = 1 });
  10.         deck.Add(new ActionCard { Value = 1 });
  11.         deck.Add(new ActionCard { Value = 1 });
  12.     return deck;
  13.     }
  14. }

Fazit

Das Factory Pattern beugt Redundantem Code vor, in dem er das Erstellen von Oft verwendeten Objekten an einem zentralen Ort vornimmt.
Für die Lesbarkeit des Codes ist dies ein enormer Vorteil.