C++ Frabrikmethode

Kennt jemand ein komplettes Beispiel für die Anwendung der Fabrikmethode? Bitte nicht das von wikipedia!! Eines bei dem aus dem int main Parameter übergeben werden.

Ich verstehe ja den Sinn und auch die Funtionsweise der Fabrikmethode nur bin ich anscheinend zu doof dieses in meinem Prog umzusetzen. Ich habe vier Klassen erstellt Produkt, konkretes Produkt, Erzeuger und konkreter Erzeuger. Das konkrete Produkt erwartet nun als Aufruf drei Sting-Parameter. Jedes Beispiel im Internet ist irgendwie anders und ich bin langsam ziemlich verwirrt. Wie muss ich das dann vom main-prog aufrufen?

Hat jemand ein Beispiel von euch, dass von vorne bis hinten komplett ist? Ich habe auch schon in der Bibel Desing Patterns gelesen, aber auch da ist kein komplettes durchgängiges Beispiel.

Danke
 
Hallo,

Im Wiki-Beispiel, auf das du eh schon verwiesen hast, kriegt die Rostwurst eh Parameter mitgeliefert. Ob du da jetzt eines wie im Beispiel, oder 3 hast ist ziemlich egal.

Edit: Oder meinst du das die Methode in der Factory die dein Produkt erstellt drei Parameter bekommen soll? Dann müsste aber die Parameteranzahl für alle Produkte gleich sein, da du sonst die Funktion nicht überschreiben können wirst.
 
Zuletzt bearbeitet:
Also ich möchte aus int main drei string variablen übergeben. Was genau muss ich aus int main denn heraus aufrufen? Ich bin ziemlich verwirrt da es in irgendwie jedem Beispiel anders gemacht wird. Im wiki-Beispiel werden aus main keine Parameter mitgegeben.
 
Um beim Wiki-Beispiel zu bleiben: Du könntest liefereMahlzeit und bereiteMahlzeitZu mit jeweils 3 string-Parameter ausstatten. Dann kannst dus von der Main aus aufrufen.
 
So sehen meine Klassen im Moment aus: Wie übergebe ich jetzt aus Main heraus die drei Strings? Irgendwie leuchtet mir das noch nicht so ganz ein! Danke

int main:
Code:
Creator_ClusterGraph ccg;
ccg.creategraph(*startparameter, inipath, codespath);

Erzeuger
Code:
class Creator
{
public:
Prod_Graph* getGraph();
	//Creator(void);
	//~Creator(void);
protected:
Prod_Graph* _graph;
virtual Prod_Graph* creategraph() = 0;
};
Prod_Graph* Creator::getGraph()
{
	creategraph();
	return new Prod_Graph;
}

Konkreter Erzeuger
Code:
class Creator_ClusterGraph : public Creator
{
public:
virtual Prod_Graph* creategraph(string *startparameter, string inipath, string codespath);
};
Prod_Graph* Creator_ClusterGraph::creategraph(string *startparameter, string inipath, string codespath)
{
return new Prod_ClusterGraph();
}

Produkt
Code:
class Prod_Graph
{
public:
Prod_Graph(void);
~Prod_Graph(void);
};
Prod_Graph::Prod_Graph(void)
{
}
Prod_Graph::~Prod_Graph(void)
{
}

konkretes Produkt
Code:
class Prod_ClusterGraph : public Prod_Graph
{
public:
Prod_ClusterGraph(string *startparameter, string inipath, string codespath);
Prod_ClusterGraph(void);
~Prod_ClusterGraph(void);
};
Prod_ClusterGraph::Prod_ClusterGraph(string *startparameter, string inipath, string codespath)
{
//hier werden funktionen ausgeführt******
}
 
Hallo,
Mal vorweg:

C++:
creategraph();
return new Prod_Graph;

muss soweit ich deinen Code jetzt verstehe
C++:
return creategraph();
heißen.

Zu deinem Problem:
Das hängt davon ab ob alle abgeleiteten Klassen von Prod_Graph die 3 Parameter brauchen oder nicht. Allgemein kannst du die Funktion wie folgt schreiben:
C++:
class Creator
{
public:
Prod_Graph* getGraph();
    //Creator(void);
    //~Creator(void);
protected:
Prod_Graph* _graph;
virtual Prod_Graph* creategraph(void** parameter) = 0;
};
Prod_Graph* Creator::getGraph(void** parameter)
{
    return creategraph(parameter);
}

C++:
class Creator_ClusterGraph : public Creator
{
public:
virtual Prod_Graph* creategraph(void** parameter);
};
Prod_Graph* Creator_ClusterGraph::creategraph(void** parameter)
{
return new Prod_ClusterGraph((string*)parameter[0], (string)*parameter[1], (string)*parameter[2]);
}

Aufruf aus der Main irgendwie so:
C++:
void ** myparam = new void*[3];
myparam[0] = (void*)startparameter;
myparam[1] = (void*)&initpath;
myparam[2] = (void*)&codespath;

ccg.creategraph(myparam);

Sollten alle deine Prod-Klassen die drei Parameter erwarten, kannst du natürlich statt den void* parameter-Liste gleich die drei Parameter verwenden.
 
Zuletzt bearbeitet von einem Moderator:
Zurück