Fabrikmuster oder abstrakte Klasse?

daddz

Mitglied
Hey Leute!

Mich plagt mal wieder eine Frage.

Erstmal vorweg, wie das ganze aussieht:

Ich habe eine Klasse z.B. Foo()
Dann sind da noch ein paar andere Klassen, die quasi zu Foo() gehören:
  • FooBar1()
  • FooBar2()
  • FooBar3()

Jetzt stellt sich mir die Frage, ob ich die Klasse Foo() im Fabrikmuster(bzw. Factory Pattern) schreiben soll oder als abstrakte Klasse, von der dann die Unterklassen abgeleitet werden.

Bei dieser Methode werden die Klassen FooBarN() direkt aufgerufen:
PHP:
abstract class Foo {

    public function __construct() {
        
        // ....

    }

}

class FooBar1 extends Foo { /*...*/ }
Und bei dieser wird eine Instanz über die Klasse Foo() erstellt.
PHP:
class Foo {

    public function __construct($class) {

        return &new $class();  // z.B. FooBar1()

    }

}
Welche der beiden Methoden ist geschickter?
Ich hoffe ihr versteht überhaupt worauf ich hinaus will. ;)


greetz
daddz
 
Meiner ungebildeten Meinung nach bist du mit dem Fabrikmuster am Besten dran.

Probier's.

Kannst du mit dem Quellcode etwas konkreter werden?
Foo kann schliesslich alles heissen, worauf willst du hinaus?
 
Ok ich konkretisiere das Beispiel mal.

Es handelt sich hierbei um die Befehlsverarbeitung im FaDzFilter (Link siehe Signatur).

Es gibt 2 verschiedene Arten von Befehlen:
  • Settings -> FaDzXMLSettings
  • Commands -> FaDzXMLCommands
Nun gibt es verschiedene "Unterklassen" wie z.B.:
  • addWord
  • deleteWord
  • auth
  • etc...
Jetzt weiß ich nicht in welchem Bezug ich die zueinander stellen soll.

Ich hoffe es ist jetzt etwas klarer geworden.

[EDIT]
Hier ist die Skizze vom Server: FaDzServer.
Vielleicht wirds dadurch noch etwas klarer.
Findet man auch in unserem Thread.
[/EDIT]

greetz
daddz
 
Zuletzt bearbeitet:
Respekt, das sieht endlich mal nach ein wenig mehr Anspruch aus.

Im Alltag von $db = mysql_query("SELECT * FROM foo") ist eine ausgefuchste
Logik echt Seltenheit. Zumindestens hier auf dem Forum.

Leider bin ich in komplexer OOPLogik keine Megaleuchte.
Von dem ausgehend was ich weiss, wäre an dieser Stelle ein Interface am
geeignetsten und unaufwändigsten zu produzieren. Aber vielleicht bist du
selber schon auf den Trichter gekommen :)
 
Respekt, das sieht endlich mal nach ein wenig mehr Anspruch aus.

Im Alltag von $db = mysql_query("SELECT * FROM foo") ist eine ausgefuchste
Logik echt Seltenheit. Zumindestens hier auf dem Forum.
Danke! ;-)

Bezüglich den Interfaces: Ich glaub weniger, dass die geeignet wären, da Interfaces soweit ich weiß eher Eigenschaften vertreten z.B. Runnable, Iterable, usw.

Auf den richtigen Trichter bin ich leider noch nicht gekommen.

Hilferuf an alle OOP-Gurus! :suspekt:

greetz
daddz
 
Ich steige momentan auch erst in OOP ein. Soweit ich das verstanden hab, nutzt man abstrakte Klassen, wenn man mehrere Klassen hatt, die Methoden haben und auch gleiche Verwendung für diese.
Bei Klassen mit verschiedenen Methoden nutzt man halt ein Fabrikmuster.

Aber wie gesagt, bin selber erst dabei zu lernen.
 
Ich tendiere momentan auch zu Interfaces.

Habe vorhin noch etwas rumgesucht und bin darauf gestoßen, dass Interfaces nicht, wie von mir erst angenommen, Eigenschaften repräsentieren, sondern eher Verhaltensweisen.

Somit steht das Ganze nun unter einem völlig anderem Licht, denn die Unterklassen "verhalten" sich ja im Prinzip alle gleich.

greetz
daddz
 

Neue Beiträge

Zurück