Implementation von Beziehungen

Status
Nicht offen für weitere Antworten.

Urs

Mitglied
Hallo, ich möchte fragen wie Beziehungen in Java implementiert werden. Ich habe bis jetzt 2 Varianten implementiert. Beide gefallen mir nicht so besonders. Beispiel: Ich habe eine Main-Klasse, eine Klasse A, B und C. Die Klasse A und C ist als Singelton implementiert. Von der Klasse B existieren 3 Objekte. Die Main und C Klasse hat auf alle Objekte von B Zugriff (Use Bezeihung). Die Klasse A muss nur auf 1 Objekt der Klasse B zugriff haben.

Meine Varianten die ich implementiert habe:
1. Die Klasse B enthält folgender Code:
Code:
    private static B b1 = null;
    private static B b2 = null;
    private static B b3 = null;

    public static B getInstanceb1() {
        if (b1 == null) {
            b1 = new B();
        }
        return b1;
    }
    public static B getInstanceb2() {
        if (b2 == null) {
            b2 = new B();
        }
        return b2;
    }
    public static B getInstanceb3() {
        if (b3 == null) {
            b3 = new B();
        }
        return b3;
    }
Der Zugriff von der C Klasse sieht dann etwa so aus:
Code:
B.getInstanceb3().macheDies();
2. Die 3 Objekte der Klasse B werden in der Main Klasse erzeugt. Beim Erzeugen der Singleton Objekte A und C gebe ich beim Konstruktor die Referenzen auf die Objekte von B mit.

Welche dieser Varianten ist Java bzw. OOP konformer? Oder ist es gar keine von meinen Varianten? Meine Erfahrung in OOP ist gering und eigentlich muss ich zugeben, dass ich das noch nicht durch und durch begriffen habe. Ich komme vom C programmieren.

Kann mir jemand weiterhelfen?
 

byte

Top Contributor
Also erstmal solltest Du den static Kram entfernen. Der ergibt nämlich imo keinen Sinn. Ein Singleton hat nur eine statische Methode, nämlich um das Singleton Objekt zu bekommen. Der Rest des Singletons ist (gemäß OOP) nicht statisch. Da Du aber offensichtlich Anfänger bist, würde ich diese Patterns eh erstmal weglassen, die scheinen Dich nur zu verwirren.

Wenn Du eine einfache 1:3 Beziehung zwischen Klassen erreichen willst. Also z.B. Klasse A kennt 3 Objekte von Klasse B, dann schreibe einfach:

Code:
class A {
  private B b1, b2, b3;

  /** Konstruktor */
  public A () {
    b1 = new B(this);
    b2 = new B(this);
    b3 = new B(this);
  }
  ...
  private void doSomethingWithB() {
    b1.doSomething();
  }
}

class B {
  private A a1;

  /** Konstruktor */
  public B (A a) {
    a1 = a;
  }
  ...
  private void doSomethingWithA() {
    a1.doSomething();
  }
}

class Main {
  public static void main(String[] args) {
    A myA = new A();
  }
}
 

Urs

Mitglied
danke, und wie habe ich dann von Main Zugriff auf z.B. b1? d.h. Ich soll generell Referenzen verteilen (wie im Beispiel). Unter umständen passiert es halt, dass ich bei einem Konstruktor bis zu 5 Referenzen übergebe.
Gruss Urs
 

byte

Top Contributor
Wenn Du von einer anderen Klasse auf die B Objekte von A zugreifen willst, dann schreibst Du Dir am besten geeignete Get-Methoden in der Klasse A:

Code:
class A {

  ...

  public B getB1() {
    return b1;
  }

  public B getB2() {
    return b2;
  }

  public B getB3() {
    return b3;
  }
}

Nun kannst Du von Deiner Main-Klasse, die das A-Objekt erzeugt, auf die B-Objekte zugreifen:

Code:
class Main { 
  public static void main(String[] args) { 
    A myA = new A();
    myA.getB3().doSomething(); 
  } 
}


Alternativ kannst Du, wenn Du mal sehr viele Objekte in Beziehung setzen willst, eine Liste benutzen. Wenn Du die Anzahl der Objekte kennst, kannst Du z.B. ein Array verwenden, um Deine B-Objekte zu speichern:

Code:
class A {
  //Array speichert 5 B-Objekte:
  B[] bArray = new B[4];

  public A() {
    for(int i=0; i<bArray.length; i++) {
      bArray[i] = new B();
    }
  }

  ...

  private void doSomething() {
    bArray[3].callMethodFromB();
  }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
A Rekursive Implementation eines Codes Java Basics - Anfänger-Themen 4
BorussiaMG1900 Implementation einer Methode Java Basics - Anfänger-Themen 1
N BlueJ Implementation Analoguhr Java Basics - Anfänger-Themen 33
L Erste Schritte Help with websocket protocol implementation Java Basics - Anfänger-Themen 5
D Fork/Join Implementation Java Basics - Anfänger-Themen 4
T Binärbaum-Suche Implementation Java Basics - Anfänger-Themen 6
P GUI: Mausklick-Implementation Java Basics - Anfänger-Themen 2
U Interface Bedeutung "Code to an interface rather than to an implementation." Java Basics - Anfänger-Themen 4
M Liste Implementation, doppelt next() Java Basics - Anfänger-Themen 13
W InsertSort Implementation Java Basics - Anfänger-Themen 5
L Methoden Files.walkFileTree implementation Java Basics - Anfänger-Themen 3
S Gute List Implementation Java Basics - Anfänger-Themen 5
K Telefonbuch Implementation mit Java Collections Java Basics - Anfänger-Themen 4
J this aus eingebetteter implementation heraus Java Basics - Anfänger-Themen 2
H implementation Java Basics - Anfänger-Themen 12
P Singleton-Implementation Java Basics - Anfänger-Themen 8
L Implementation gesucht - ArrayList.iterator() Java Basics - Anfänger-Themen 3
G Map-Implementation die nicht sortiert Java Basics - Anfänger-Themen 9
T 1:1 Beziehungen realisieren ? Java Basics - Anfänger-Themen 13
M [Hibernate] Speichern von ManyToOne-Beziehungen in der DB Java Basics - Anfänger-Themen 12
B hsqldb (beziehungen zw. Tabellen) Java Basics - Anfänger-Themen 8
E n:1 Beziehungen umsetzen Java Basics - Anfänger-Themen 13
M Beziehungen zwischen HashMaps Java Basics - Anfänger-Themen 12
G Beziehungen in Java ! Beispiele ! Java Basics - Anfänger-Themen 5
T Beziehungen erstellen? Java Basics - Anfänger-Themen 17
Student Beziehungen zwischen Klassen - wie strukturiere ich das? Java Basics - Anfänger-Themen 23

Ähnliche Java Themen

Neue Themen


Oben