Java Interface: Entweder - oder

Diskutiere Java Interface: Entweder - oder im Java/Mono/dotGNU Forum im Bereich Programmieren unter Linux/Unix; Hallo Leute, ich habe die Aufgabe bekommen eine Kundenverwaltung zu programmieren. Am Anfang sollen alle Daten noch in eine Textdatei...

  1. nighT

    nighT Gast

    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

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    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 Gast

    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. Java 13 freigegeben

    Java 13 freigegeben: Java 13 ist wie geplant ein halbes Jahr nach Java 12 erschienen. Die neue Version implementiert insgesamt fünf Neuerungen. Neu in die Sprache...
  2. Hermes: JavaScript-Engine von Facebook

    Hermes: JavaScript-Engine von Facebook: Facebook hat Hermes, eine JavaScript-Engine zur Ausführung von React Native auf Android, vorgestellt. Hermes optimiert die Ausführung von...
  3. Durch Javascript generierte Webseiten parsen

    Durch Javascript generierte Webseiten parsen: Hallo zusammen, überlicherweise waren Webseiten immer ganz gut zu parsen, mittlerweile läd der Browser jedoch nur noch ein JavaScript von der...
  4. 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...
  5. 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...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden