Möglichkeiten ein abgeleitetes Objekt zu erzeugen

redbomber

Bekanntes Mitglied
Hi zusammen,

ich habe wieder eine Frage:

Ich erzeuge aus einem XML-Dokument Objekte vom Typ MainObject.
Nun möchte ich ein neues Object erstellen MyObject, welches von MainObject ableitet und dieses um weitere Attribute ergänzt.

Die Routine in der ich aus dem XML-Dokument meine MainObject's erstelle wollte ich nicht ändern.
Dies sieht in etwa so aus:

Java:
 void loadXMLFile() throws Exception {
      // xml file wird gelesen eine NodeList wird erstellt
      NodeList nodeList = readXMLFile(...);
      for (int i = 0; i < nodeList.size(); i++) {
            // Im Konstruktor werden die Attribute aus dem Node ausgelesen
            MainObject object = new MainObject(nodeList.get(i));
      }
   }
}

Im Konstruktor von MainObject werden alle Parameter aus dem XML-Dokument für das MainObject gesetzt.
Hier könnte ich also feststellen ob ich mein Element im XML-Dokument vom Typ MainObject oder vom Typ MyObject ist.

Welche Möglichkeiten hätte ich an dieser Stelle?
Java:
// Im Konstruktor werden die Attribute aus dem Node ausgelesen
MainObject object = new MainObject(nodeList.get(i));

Möglichkeit 1:
Ich könnte vorab testen ob mein Node ein bestimmtes ZUSÄTZLICHES (OPTIONALES) Element besitzt.
Falls ja -> erzeuge MyObject
Falls nein -> erzeuge MainObject

Und noch eine Möglichkeit?
Möglichkeit 2:
 
Zuletzt bearbeitet:
Falls ja -> erzeuge MainObject
Falls nein -> erzeuge MainObject
soll doch sicher
Falls ja -> erzeuge MainObject
Falls nein -> erzeuge MyObject
heißen?

ohne ein if/else kommt man hier meiner Ansicht nach wirklich nicht weit,
das sind 3 Zeilen bekannter Code, was da 3-x Seiten kompliziertes Pattern bringen soll?..
 
soll doch sicher
...
heißen?
Sorry, ich meinte es anders rum, habe es eben oben nochmals genauer beschrieben:

So ist es richtig:

Testen ob Node ein bestimmtes ZUSÄTZLICHES (OPTIONALES) Element besitzt:
Falls ja -> erzeuge MyObject
Falls nein -> erzeuge MainObject


Also ich möchte überall im Code weiter mit MainObject arbeiten. Von aussen muss ich auch auf keine zusätzlichen Methoden oder attribute zugreifen. Die werden nur intern in der Klasse benötigt und liefern ein anderes Ergebnis. Schnittstellen sind also identisch.

Ich könnte z.B. eine AbstractFactory Klasse die einem die Methode anbietet:
Java:
abstract class ProductFactory
{

public MainObject getSpecificObject(Node node){
   MainObject object=null;
   if(node.getItemBla()==null){
      // MyObject leitet von MainObject ab
      object = new MyObject(node);
   } else{
      object = new MainObject(node);
   }
   return object;
}
}

Sieht vielleicht besser aus und "verpackt" diese Abfrage.
Für diese einzige Methode die ich benötige vielleicht etwas zu aufwendig?
 
Zuletzt bearbeitet:

Zurück
Oben