virtuelle Variante der Factory Method
-
Hallo,
ich suche nun schon mehrere Stunden ein Beispiel in dem der Nutzen des Factory Method Pattern (Ohne Parameter in der Create Methode - also rein über die polymorphie) zu sehen ist.
Hier mal ein Bespiel der typischen Erklärung:
http://www-eleves-isia.cma.fr/documentation/DesignPatterns/pat3c.htmBei den klassischen beispielen, ist immer nur eine Variante eines konkreten Produkts und eines konreten Erzeugers dargestellt (z.B. Application - Document Beispiel). Sobald ausnahmsweise mal mehrere Varianten da sind, wir immer über einen Parameter entschieden, welches konkrete Produkt erstellt werden soll.
Was ebenfalls nirgends zu finden ist, ist ein wirkliches Beispiel, wie man das Pattern benutzt (also nicht wie ich das Pattern anlege, sondern wie mein Code (Beispiel 2 im link --> Client Code))
-
Hallo
In meinem Code benutzt ich die von dir gewünschte Factory-Variante oft, zum Beispiel für das Erstellen von GUI-Controls.
class BaseField { // Erstellt ein zum Feldtyp passendes Control // (parent ist zwar Parameter der Methode hat aber auf die Auswahl keinen Einfluß virtual wxWindow* CreateControl(wxWindow* parent) const = 0; }; // Beispiel für eine konkrete Factory class TextField : public BaseField { virtual wxWindow* CreateControl(wxWindow* parent) const { return new wxTextCtrl(parent); } }; // In einem Container-Control sollen für alle Felder einer Gruppe die passenden Controls erstellt werden for (std::vector<BaseField*>::const_iterator it = fields.begin(); it != fields.end(); ++it) { (*it)->CreateControl(this); }
(sehr vereinfacht dargestellt)
bis bald
akari
-
Das mit der virtuellen Factory Methode nennt man normalerweise eine "abstract factory".
http://en.wikipedia.org/wiki/Abstract_factory_pattern
In dem Code von akari wäre die "abstract factory" die Klasse "BaseField", und "TextField" wäre eine "concrete factory" welche eben "BaseField" implementiert.
Wie genau man sowas einsetzt hängt auch von den Anforderungen ab. In gewissen Fällen kann es Sinn machen der factory schon dort wo man die factory erstellt bestimmte Parameter mitzugeben, in anderen Fällen wieder macht es Sinn die Parameter erst der Funktion selbst mitzugeben (also erst dort wo die factory verwendet wird). Oder auch beides zusammen, bzw. manchmal braucht man auch garkeine Parameter.
-
Factory Method Pattern wäre dann dies hier:
http://en.wikipedia.org/wiki/Factory_method_pattern