Problem mit Schnittstelle

Mehadorz

Mitglied
Hallo zusammen,

ich habe eine Aufgabe die ich auch zu 90 % gelöst hab, aber bei einer Sache hänge und nicht weiter kommen, vielleicht kann mir ja jemand einen Denkanstoß geben.

Also, hier die Erklärung:
Es geht um eine Export-Schnittstelle von Kunden, die in einer ArrayListe verwaltet werden und das ganze dann über eine Schnittstelle ausgegeben werden soll. Die Kunden werden in einem Container verwaltet, welcher auch neue Kunden anlegt. Der Container implementiert die Schnittstelle Iterable. Es soll eine eigene Schnittstelle ExportI erstellt werden, mit der Operation getExport. Mit dieser Schnittstelle sollen die Kunden einmal als Text ausgegeben werden oder als XML.

Und genau da liegt mein Problem, ich hab die Operation getExport neu geschrieben, aber ich weiß nicht, wie ich den Verbindung zu meiner Kundenverwaltung hinkriege.

Hier mal mein bisheriger Code:

Schnittstelle ExportI
Java:
public interface ExportI
{
    //abstrakte Operation
    public abstract void getExport();
}

Klasse Kunde
Java:
public class Kunde
{
    //Attribute
    private int nummer;
    private String nachname;
    private String vorname;

    //Konstruktor
    public Kunde(int nummer, String nachname, String vorname)
    {
        this.nummer = nummer;
        this.nachname = nachname;
        this.vorname = vorname;
    }

    public int getNummer()
    {
        return nummer;
    }

    public String getNachname()
    {
        return nachname;
    }

    public String getVorname()
    {
        return vorname;
    }
}

Container zur Kundenverwaltung
Java:
import java.util.*;

public class KundenContainer implements Iterator, Iterable
{
    //Klassen-Attribut zum speichern der Referenz auf das Objekt
    private static KundenContainer einKundenContainer = null;
    private static int kundenNummer = 0;
    //Attribut
    private ArrayList meineKunden = new ArrayList();
    private int index = 0;
    private Kunde einKunde;

    //Konstruktor, von außen nicht zugreifbar
    private KundenContainer()
    {
    }
    //Klassen-Operation, die die Objektreferenz liefert
    //Wenn Objekt noch nicht vorhanden, dann wird es erzeugt
    public static KundenContainer getObjektreferenz()
    {
        if (einKundenContainer == null)
        {
            einKundenContainer = new KundenContainer();
        }
        return einKundenContainer;
    }

    //Implementierung der Schnittstelle Iterator
    public boolean hasNext()
    {
        return index < meineKunden.size();
    }
    
    public Object next()
    {
        Object erg = meineKunden.get(index);
        index++;
        return erg;
    }
    
    public void remove()
            throws UnsupportedOperationException
    {
        
    }
    //Implementierung der Schnittstelle Iterable
    public Iterator iterator()
    {
        return this;
    }

    public void newKunde()
    {
        einKunde = new Kunde(getKundenNummer(), "Mustermann", "Max");
        meineKunden.add(einKunde);
    }
    private int getKundenNummer()
    {
        kundenNummer++;
        return kundenNummer;
    }
}

UI Klasse mit Main
Java:
public class ExportUI
{
    public static void main(String[] args)
    {
        KundenContainer meinContainer = KundenContainer.getObjektreferenz();

        for (int i = 0; i < 4; i++)
        {
            meinContainer.newKunde();
        }

        System.out.println("Bitte wählen Sie die Ausgabe aus.");
        System.out.println("t: Text-Export (Standartausgabe), x:XML-Export");
        char auswahl = Console.readChar();
        ExportI einExport;

        if(auswahl == 'x')
        {
            einExport = new XMLExport();
        }
        else
        {
            einExport = new TextExport();
        }

        einExport.getExport();
        Kunde einKunde;
        for (Object o : meinContainer)
        {
            einKunde = (Kunde)o;
            System.out.println("Nummer, Nachname, Vorname; " + einKunde.getNummer() + ", " + einKunde.getNachname()+ ", " + einKunde.getVorname());
        }
    }
}

Schnittstelle TextExport
Java:
public class TextExport implements ExportI
{
    public void getExport()
    {
        System.out.println("Nummer, Nachname, Vorname; ");
    }
}

Schnittstelle XMLExport
Java:
public class XMLExport implements ExportI
{
    public void getExport()
    {
        System.out.println("<Kunde>");
    }
}

Der Code

Java:
        Kunde einKunde;
        for (Object o : meinContainer)
        {
            einKunde = (Kunde)o;
            System.out.println("Nummer, Nachname, Vorname; " + einKunde.getNummer() + ", " + einKunde.getNachname()+ ", " + einKunde.getVorname());

funktioniert in der UI Klasse, wie schaffe ich es, dass er auch in der TextExport Schnittstelle funktioniert?
 
Z.B.

Java:
public class TextExport implements ExportI
{
    private KundenContainer kunden;

    public TextExport(KundenContainer kunden) {
        this.kunden = kunden;
    }

    public void getExport()
    {
        System.out.println("Nummer, Nachname, Vorname; ");
    }
}

und dann getExport so gestalten das das gewünschte rauskommt.
 
Um ehrlich zu sein, hab ich mir so was auch schon gedacht...was mich ein wenig stutzig macht, ist die UML die ich zur Verfügung hab, wo nur die ExportUI Klasse eine Assoziation zum Container hat. Deswegen hab ich das so nicht implementiert.
 
Dann ist das o.g. aber richtig und die Export Klasse wird von der UI erstellt.

Export benötigt die Daten, die er exportieren soll...

Und da export() parameterlos ist, muss der Export den Container bekommen...

Wer hat das UML gemacht? - Ist das Gott gegeben oder selbst erstellt?
 

Zurück
Oben