Factory pattern: gleiches Objekt zurückgeben

Ozzy Ozborn

Erfahrenes Mitglied
Hi,

ich starte gerade ein neues Projekt mit C++, seitdem ich längere Zeit nur C programmiert habe. Nun möchte ich mich aber ein wenig mit den DesignPattern beschäftigen und habe zumindest für das FactoryPattern eine gute "Einsatzmöglichkeit" gefunden, bei der ich mir aber bei der Implementierung nicht ganz sicher bin. Also:
ich möchte in einer UI, welche aus verschiedenen Klassen besteht, Daten aus einer Datenquelle anzeigen. Dafür kann ich natürlich nicht in jeder Datei ein neues Objekt erzeugen, da es diese Quelle ja nur einmal gibt. Daher habe ich zuerst etwas mit Singletons rumgespielt. Das klappt ja aber auch nur immer so lange, wie ich genau ein Objekt habe. Was passiert aber, wenn ich z.B. irgendwann zwei Quellen habe, z.B. einmal live-Daten und einmal augezeichnete Daten? Daher der Gedanke die Factory einzusetzen. Was ich bisher aber immer nur gesehen habe, ist, dass aus der Factory immer ein neues Objekt erzeugt wird und eben nur diese Implementierung versteckt wird. Wie bekomme ich das aber hin, dass nur z.B. zwei Objekte erzeugt werden, und ich mir dann "per Auswahl" das richtige Objekt zurückgeben lassen kann?

Vielen Dank für Eure Hilfe
Ozzy
 
Hallo,

ich würde sagen in dem Fall musst du der Factory-Methode einen Parameter übergeben anhand derer beim Aufruf entschieden werden kann ob eine bereits existierende Instanz der Klasse zurück gegeben werden muss oder eine neue kreiert werden muss. Falls die Daten einmal aus einer Datei oder aus einer anderen Quelle kommen, könntest du doch zum Beispiel erst den Datei-Namen evaluieren, gucken ob eine entsprechende Datei existiert und bereits geöffnet ist - in dem Fall sollte die existierende Instanz zurück gegeben werden - oder aber die Daten von einem extern angeschlossenen Gerät kommen.

Gruß,
Wolf
 
Moin,

meine Idee war es auch, einen #define-Wert mitzugeben. Wenn das Objekt dahin noch nihct verwendet wurde soll es dann erstellt werden, ansonsten wird es zurückgegeben. Somit können die GUI-Elemente auch während der Laufzeit einen anderen Datensatz verwenden.
Hat denn jemand von Euch eine Quelle mit einem guten Code hierfür damit ich sehe, wie das richtig geht?

Viele Grüße
Ozzy
 
Mit einem #define? Ich sehe im Moment nicht, wie du mit einem #define das Verhalten zur Laufzeit ändern willst. #define´s sind Preprocessor Direktiven, d.h. der Compiler ersetzt überall da den Code wo dein define im Quelltext eingesetzt wird.
Oder willst du nur eine Konstante damit definieren im Sinne von

C++:
#define USE_FILE 0
#define USE_LIVE_CAPTURE 1

static Data* Create(unsigned int flag) { ... }

das würde auch gehen, aber da kannst du dann auch ein enum oder ähnliches verwenden.

Gruß,
Wolf
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück