OOP - Design Pattern

baserider

Well-known member
ID: 174417
L
10 März 2007
682
23
Hi,

kennt sich wer mit dem Factory-Pattern aus?

ich habe das mal etwas umgesetzt, und es werden ja dadurch objekte zur Laufzeit erzeugt.

es gibt eine Klasse von der weitere Klassen erben.

Mein Problem ist jetzt, da die objekte erst erzeugt werden und jede erbende klasse andere methoden hat, ich nicht weiß welche methoden ich mit dem objekt benutzen kann.

PHP:
class factory{
     function getClass($class){
          return new $class()
     }
}

jetzt müsste ich wissen welche methoden ich jeweils anwenden kann, wenn z.B. von einer Oberklasse Produkte jweils Klassen buch und cd abgeleitet werden
 
Ich habe ehrlich gesagt keine Ahnung, was dein Code mit dem Factory Pattern gemeinsam haben soll, das sieht mehr nach nem unnützen Wrapper um das new-Statement aus.

Vllt ein besseres Beispiel ;)
 
das war mehr auch nur nen pseudo code und im prinzip ist die klasse iin deinem beispiel ja genauso.

aber dann kann ich das gleich mal an dem beispiel machen. angenommen ich hätte bei den pizzen jeweils noch spezifische methoden mit drin, die nur für jeweils eine pizza gelten, z.B.

hawai pizza: zaehleAnanasstuecke()
mushroom: zaehlePilzstuecke()

ich weiss dummes bsp, aber mir fällt grad nix besseres ein...

ich bekomme ja nur nen objekt pizza, woher weiß ich das ich jetzt
zähleAnanasstücke() oder zählePilzstücke() verwenden kann?

muss man immer erst prüfen:

if ($type == 'hawaiian') $pizza->zaehleAnanasstuecke()
 
Der Sinn hinter dem FactoryPattern ist, dass du nur die Sicht eines abstrakteren Objektes zurückgibst, der die gleichen Funktionalitäten hat, wie das spezielle Objekt.
Wie in dem Beispiel, alle Pizzas haben die gleichen Methoden, und das reicht uns, weil wir nur auf Pizzas operieren, die genaue Pizza ist uns egal.

Wenn du genau wissen musst welcher Typ das ist, dann wird da kein FactoryPattern nen Sinn machen, denn das soll die spezielle Implementation verbergen.

Die Fabrikmethode (in der formal korrekten Bedeutung) findet Anwendung, wenn eine Klasse die von ihr zu erzeugenden Objekte nicht kennen kann bzw. soll (1), (2) oder Unterklassen bestimmen sollen, welche Objekte erzeugt werden (nur 1)). Typische Anwendungsfälle sind Frameworks und Klassenbibliotheken.

Fabrikmethode
 
dann kreierst du eben eine methode getStücke($zutat)... wenn du unbedingt verschiedene methoden brauchst, ist das factory pattern unangebracht.
man könnte sich in php sicherlich mit method_exists() durchwurschteln, aber sauber ist das dann auch nicht mehr.
 
ok, also nur bei gleichen funktionalitäten verwenden.

ich dachte nur wenn eine klasse erbt, dann füge ich dieser klasse auch spezielle methoden hinzu, aber da ist wohl dann das Pattern ungeeignet