Factory

dngfng

Aktives Mitglied
Hallo,
ich wollte nur mal fragen auf welche weise Ihr bevorzugt Factories programmiert.

Besonders interessiert mich was der Vorteil von folgenden ist:
Java:
String oddClass = null;

switch(value) {
   case SOMETHING: {
         oddClass = "de.xxx.yyy.OddClass";
         break;
   }
   ...
   default: {
      return null;
   }
}

Class instanceClass = Class.forName(oddClass);
return (OddClassInterface) instanceClass.newInstance();

zu diesem Ansatz:
Java:
OddClassInterface oddClass = null;

switch(value) {
   case SOMETHING: {
         oddClass = new ImplOddClass1();
         break;
   }
   ...
   default: {
      return null;
   }
}

return oddClass;
 
Zuletzt bearbeitet:

DerEisteeTrinker

Bekanntes Mitglied
Also ich würde deinen ersten Ansatz verwenden, wenn sich die Klassennamen in "Properties" befinden und somit verändern können zur Laufzeit.

Das zweite würde ich persönlich nutzen, wenn ich genau weiß welche Klasse verwendet werden soll und diese sich zur Laufzeit nicht ändern.

Generell gibt es keine bevorzugte Fabrik-Implementierung, sondern da muss man einfach schauen, wie die Anforderungen der Anwendung sind.
 
M

maki

Gast
ich wollte nur mal fragen auf welche weise Ihr bevorzugt Factories programmiert.
Für so einen Fall wie den 1. von dir geschildert nutze ich am liebsten fertige Lösungen, wie Spring.
Die 2. Konstellation mache ich manchmal noch selber, oder ich nutze Spring :)
 

dngfng

Aktives Mitglied
Danke für die Antwort - der erste Ansatz ist eben nur das was ich im Code vorgefunden habe - und habe mich etwas gewundert was genau dies bewirken soll.

Da der Classpass fest als String codiert ist und nicht aus einer Property datai gelesen wird ist es wohl kompletter Blödsinn wie dies gemacht wurde. Da hier garantiert bekannt ist welche Klassen zu laden sind.

Falls jemand noch Ideen zu denn Sinn und Zweck hat würde ich mich über weitere hinweise freuen.
 
M

maki

Gast
Da der Classpass fest als String codiert ist und nicht aus einer Property datai gelesen wird ist es wohl kompletter Blödsinn wie dies gemacht wurde. Da hier garantiert bekannt ist welche Klassen zu laden sind.
Ja, ist wohl nicht konsequent durchgezogen worden, dadurch hat man jetzt eine Mischlösung, die nix ganzes und nix halbes darstellt, eben das schlechteste aus beiden Welten vereint.
 

dngfng

Aktives Mitglied
Danke für eure Antworten - als ich den Code sah war ich mir nicht sicher ob der Code als solches schlüssig ist. Wie ihr mir bestätigt habt ist er es nicht.
 

DerEisteeTrinker

Bekanntes Mitglied
@maki
Ich nutze auch Spring, aber es ist nicht immer möglich Spring zu verwenden, weil ich nicht nur für ein paar Fabriken anfange Spring in eine Anwendung einzupflegen und so mit einem Artillerie-Geschütz auf ein paar Spatzen schieße. Bzw. was machst du, wenn dein Kunde sagt, dass er kein Spring haben möchte, sondern ein anderes Framework?

@TS
Wie gesagt, es gibt da viele Lösungen. Universell ist da nichts zu holen. Schau dir an, was du brauchst und dann such dir den Weg, der dich heil und ohne Bauchschmerzen nach Rom führt. Sicher ist Spring ein mächtiges Framework, aber eben auch nicht das Non-Plus-Ultra.
 
M

maki

Gast
@maki
Ich nutze auch Spring, aber es ist nicht immer möglich Spring zu verwenden, weil ich nicht nur für ein paar Fabriken anfange Spring in eine Anwendung einzupflegen und so mit einem Artillerie-Geschütz auf ein paar Spatzen schieße. Bzw. was machst du, wenn dein Kunde sagt, dass er kein Spring haben möchte, sondern ein anderes Framework?
Wenn der "Kunde" kein Spring/etc. möchte, sollte er besser ein Entwickler/Teamlead sein, denn mir ist die Meinung von BWL'ern egal, denn die mich holen weil sie es selber nicht können.

Wenn der Entwickler/Teamlead lieber Guice haben möchte ist das auch ok.
Wenn man Spring sowieso nutzt (oft der Fall bei mir, ausser es gibt einen ähnlichen Ersatz), dann spart man sich den Code für die Factory mit Spring und hat eine einfachere(!) Lösung durch Spring, also nix mit Kannonen auf Spatzen schiessen.
 

Ähnliche Java Themen


Oben