Java Interface: Entweder - oder

Dieses Thema im Forum "Java/Mono/dotGNU" wurde erstellt von nighT, 23.03.2011.

  1. nighT

    nighT Guest

    Hallo Leute,

    ich habe die Aufgabe bekommen eine Kundenverwaltung zu programmieren. Am Anfang sollen alle Daten noch in eine Textdatei geschrieben werden (zu Testzwecken). Später sollen die Daten dann in eine Datenbank (Oracle, SQlite o.Ä.).
    Nun wurde mir gesagt, ich soll das ganze über ein Interface realisieren.
    Sprich:
    Ich habe später 2 Klassen (KundeToTextfile und KundeToDatenbank). Beim Programmstart soll dann per Konstante o.Ä. festgelegt werden, ob die Informationen in das Textfile oder in die Datenbank kommen.

    Könnt ihr mir sagen, wie ich das lösen kann? Wie ich die Auswahl (den Wert der Konsante) behandeln soll, um dann die eine oder die andere Klasse zu verwenden?

    Kann ich das Interface direkt ansprechen und sagen, wie: "Wenn 1 dann verwende Textdatei und wenn 2 dann verwende Datenbank"? Das mir das Interface selbst dann die jeweilige Klasse antriggert?

    Gruß nighT
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bytepool, 23.03.2011
    Zuletzt bearbeitet: 23.03.2011
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    ich habe beim lesen von deinem Post ein wenig das Gefuehl dass du entweder Java Interfaces nicht wirklich kennst, oder nicht verstanden hast. Die Aufgabenstellung scheint mir extrem deutlich, aber vielleicht programmier' ich auch schon zu lange.

    Du hast ein DB Backend, was fuer eins ist voellig Wurscht, und dafuer sollst du ein Interface definieren, damit du bei der implementierung der Verwaltung nicht drum kuemmern musst wie das Backend aussieht.

    Z.B. so in die Richtung:
    Code:
    public interface StorageBackend
    {
       public void write(String key, String data);
       public String get(String key);
    }
    
    Dann kannst du dir zwei Klassen schreiben die das Interface unterschiedlich implementieren, die eine schreibt in eine Textdatei, die andere in die Datenbank, und der Client Code muss sich da keine Gedanken drum machen, dort benutzt du nur das Interface.

    Edit:
    Mach dich zum Thema Polymorphie schlau, wenn obiges noch nicht klar sein sollte.

    mfg,
    bytepool
     
  4. nighT

    nighT Guest

    Danke für deine Antwort.

    Ich bin relativ neu in Java oder zumindest in der objektorientierten Programmierung und habe bisher noch nicht mit Interfaces gearbeitet.

    Soweit habe ich alles schon aufgebaut. Das Interface existiert mit den nötigen Methoden und es wird (bisher) von einer Klasse KundeToTextfile implementiert.
    Mein Problem ist nun nur: Wenn ich später eine zweite Klasse habe, weiß ich nicht, wie ich auf das Interface zugreifen soll. Die Klasse, die das Interface verwendet "kennt" im Normalfall die Klassen, die das Interface implementieren nicht. Oder liege ich da falsch?

    Wie kann ich nun also aus der Klasse Kundenverwaltung auf das Interface zugreifen, sodass eine der beiden Klassen (die das Interface implementieren) verwendet wird?
     
  5. #4 bytepool, 23.03.2011
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    ich dachte das waere offensichtlich:
    Code:
    class Account
    {
       StorageBackend myBackend;
       
       public void setBackend(StorageBackend aBackend)
       {
          myBackend = aBackend;
       }
    
       public void doStuff()
       {
          // use myBackend here, after setBackend has been called
       }
    }
    
    Du uebergibst deiner Verwaltungs (Account) Klasse das Backend das du benutzen willst als Objekt (welches das Interface StorageBackend implementiert). Das ist der Sinn der ganzen Sache.

    Statt mit einer setter Methode ginge es natuerlich auch direkt im Konstruktor, aber ich bin eher ein Anhaenger obiger Strategie.

    mfg,
    bytepool
     
  6. #5 Plinzen, 23.03.2011
    Plinzen

    Plinzen Foren As

    Dabei seit:
    11.04.2007
    Beiträge:
    96
    Zustimmungen:
    0
    Oder über eine Art zentrale Factory

    Eine weitere Möglichkeit wäre auch eine Factory, die dir dann eine konkrete Implementierung deines Interfaces zurückliefert.
    Code:
    public class DAOFactory {
    
    public KundenBackendInterface getKundenBackend(){
           return new KundenToTextImpl(); 
    }
    
    }
    
    Aber nebenbei: Für einen Anfänger in OOP und Java ist das nicht triviales...
    Vielleicht hilft dir dieser Link weiter, um eine Idee von einer guten Lösung zu erhalten:
    http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html

    mfg
     
Thema:

Java Interface: Entweder - oder

Die Seite wird geladen...

Java Interface: Entweder - oder - Ähnliche Themen

  1. Werkstudent/ in als Mobile -Entwickler für Android (Java)

    Werkstudent/ in als Mobile -Entwickler für Android (Java): Werkstudent/ in als Mobile -Entwickler für Android (Java) Die DiOmega GmbH ist eine Agentur mit Sitz in Frankfurt am Main, die sich auf IT- und...
  2. Mobile -Entwickler für Android (Java) in Vollzeit (m/w)

    Mobile -Entwickler für Android (Java) in Vollzeit (m/w): Mobile -Entwickler für Android (Java) in Vollzeit (m/w) Die DiOmega GmbH ist eine Agentur mit Sitz in Frankfurt am Main, die sich auf IT- und...
  3. Java-Entwickler in Vollzeit (m/w)

    Java-Entwickler in Vollzeit (m/w): Java-Entwickler in Vollzeit (m/w) Die DiOmega GmbH ist eine Agentur mit Sitz in Frankfurt am Main, die sich auf IT- und Web-Dienstleistungen...
  4. iJUG: Sorge um JavaFX

    iJUG: Sorge um JavaFX: Für den iJUG mehren sich die Anzeichen, dass JavaFX keine große Zukunft mehr bei Oracle hat. So wurde die Unterstützung für die Version 8u33 von...
  5. Java-Anwendungsserver: WildFly 10 freigegeben

    Java-Anwendungsserver: WildFly 10 freigegeben: Der Java-Anwendungsserver WildFly ist in Version 10 erschienen. Die neue Version ist nur noch für Java 8 und 9 ausgelegt und kann unter anderem...