Frank (no reg): Fabrikmethoden

Beitrag lesen

Hi,

dann versuch es in RL (Real Life) zu übertragen. Was machen Fabriken für gewöhnlich? Sie produzieren Objekte, bestimmte Objekte. Eine Dönerfabrik zum Beispiel Dönerfleisch, eine Spielzeugfabrik zum Beispiel Holzklötze (ohne sonstige sonderliche Funktionsmerkmale) oder Plüschtiere.

In OO übertragen ist eine Factory ein oft eine Klasse die Methoden zur Produktion (Instantzierung) andererer Klassen (Objekte) anbietet.

  
class MyFactory  
{  
   // das ist eine Fabrikmethode, die ein Objekt vom Typ MyObject prodzuiert  
   MyObject CreateMyObject()  
   {  
     return new MyObject();  
     // oder  
     return MyObject.CreateFromContext();  
   }  
}  

Factory-Methoden oder Fabrik-Methoden können aber auch zum Bleistift auch direkt auf dem eigentlich Objekt definiert werden, dann meistens statisch:

  
class MyObject  
{  
   // das ist eine statische Fabrikmethode, die sich selbst prodzuiert  
   static MyObject CreateFromContext()  
   {  
     // erzeuge z.b. eine neue Instanz von MyObject, setze Properties und gib sie zurück  
     MyObject emmo = new MyObject();  
     // emmo.MyProperty = "HelloWorld";  
     // emmo.Initialize();  
     return emmo;  
   }  
}  

Du standardisierst dadurch die Instanzierung von deinen Objekten und kannst Regeln für selbige einfliessen lassen und deren Komplexität dann in der Fabrikmethode verstecken. Ansonsten hast du vielleicht viele wiederkehrende Codeblöcke à la

  
{  
  // das ist oft redundant  
  MyObject emmo = new MyObject();  
  emmo.MyProperty = "HelloWorld";  
  emmo.Initialize();  
  
  // und hier fängst an mit dem Objekt die eigentliche Arbeit zu machen  
  emmo.DoMyWork("Hello World");  
}  

Wenn du im Web nach Patterns suchst oder "Erich Gamma" wirst du sicher einiges an Literatur finden. Unter anderem gibt es auch im Archiv des Forums dazu Threads. :)

Ciao, Frank