Methoden Observer-Pattern mit Consumer und accept( )

JimmyKudo

Mitglied
// Hallo Leute, ich hab ein großes Problem ^^
// Wenn die getMethode aufgerufen wird, soll die Listener-Methode benachrichtigt werden.
// Das ist mein Ansatz:


List<Consumer<Collection<N>>> observers = new ArrayList<>();

public void registerObserver(Consumer<Collection<N>> listener) {
this.observers.add(listener);
}

public void notifiyObserver(Collection<N> c) {
for (Consumer<Collection<N>> observer : observers) {
observer.accept(c);
}
}



public Collection<N> getMethode() {
notifiyObserver(ig.getNodes());
}

public void Listener(Consumer<Collection<N>> listener) {
registerObserver(listener);
}



// Ich weiß aber nicht ob das korrekt ist und wie ein Test in der
// MAIN-Methode aussehen könnte. Wie soll ich die
// Consumer<Collection<N>> listener definieren .
// listener = x ->sysout(x); macht nicht wirklich sinn.
 

KonradN

Super-Moderator
Mitarbeiter
Wenn Du Probleme hast, ein Interface mit Lambda Expression zu implementieren, dann mache es doch einfach erst einmal auf die gute alte Art und Weise um erst einmal das generelle Verständnis zu bekommen.

Und da wäre der Ansatz z.B. ein einfaches:
Consumer<Collection<N>> listener = new Consumer<Collection<N>>() {};
Und dann einfach die IDE die Methode implementieren lassen. Dann hast Du vermutlich etwas wie:

Java:
        Consumer<Collection<N>> listener = new Consumer<Collection<N>>() {
            @Override
            public void accept(Collection<N> s) {

            }
        };

Und die Methode kannst Du dann so füllen wie Du möchtest. Und das kann ggf. auch einfach zu einem lambda Ausdruck umgewandelt werden. Oder du implementierst einfach eine Methode, die die Parameter/Rückgabe wie die accept Methode hat und nutzt die Methodenreferenz.

Und: Was ist hier das N? Wenn das ein Generic ist, dann wirst Du ja vermutlich eine konkrete Implementation ansprechen wollen ...

Ansonsten noch paar Hinweise:
- Bei Code immer Code-tags nutzen (Oberhalb der Eingabe der </> Knopf)
- Methoden immer mit Verb und klein starten (public void Listener(Consumer<Collection<N>> listener) {)
 

Ash

Mitglied
Ich versuche seit 2 Tagen das gleiche Problen zu lösen, aber klappt leider nicht. kann mir jemand erklären, wie das funktioniert. Ich verstehe da gar nix und verstehe nichts was mit listener gemeint ist. Danke im Voraus!
 

KonradN

Super-Moderator
Mitarbeiter
Was genau ist denn das Problem? Wenn man das etwas besser erläutern würde, dann könnte man auch helfen. Den TE hatte ich so verstanden, dass er lediglich Probleme hatte, einen Consumer zu implementieren.

ObserverPattern ist ansonsten auf vielen Seiten relativ gut erläutert. Unter dem Strrich ist es einfach nur eine Vereinfachung, damit eine Klasse unabhängig von anderen Implementationen funktioniert. Nimm einfach einen Button in einer Oberfläche. Der Button kennt die Klassen nicht, die ggf. an seinem Status interessiert sind. Daher abstrahiert er das einfach und bietet an, alle zu Informieren, die an einer internen Aktion interessiert sind.
Beim Button kann es also einfach eine Information sein, dass er gedrückt wurde.

Dazu verwende ich in der Regel ein eigenes Interface. Das könnte hier ein ButtonPressed Interface sein. Und das hat dann eine Methode buttonPressed() oder so. Wer nun daran interessiert ist, der kann sich also bei dem Button melden und sagen: Bitte Informiere mich, wenn Du gedrückt wurdest. Und ich stelle dafür eben genau diese Methode parat (Indem man selbst das Interface implementiert, eine eigene Implementation anbietet z.B über anonbyme Klasse oder - so wie es ab Java 8 üblich ist - per Lambda oder Methodenreferenz).

Das ist also wie bei der Bank: Die haben da dann ggf. eine Liste, wer alles zu informieren ist, wenn Geld eingeht. Was da alles auf die Liste kommt ist offen. Wichtig ist nur: Die müssen eine klar definierte Schnittstelle anbieten. Das kann also z.B. sein, dass Du eine SMS bekommst, wenn Geld eingegangen ist. Es kann aber auch ein Mechanismus sein, der Geld direkt pfändet oder so. oder egal was man sich da noch vorstellt: Die Implementation des Kontos ist final. Daran muss man nichts mehr ändern - egal was da noch auf die Liste kommen könnte.

Ist das etwas verständlich so? Etwas anders erläutert findet man es z.B. hier: https://de.wikipedia.org/wiki/Beobachter_(Entwurfsmuster)
Ausführlich behandelt wird es auch in dem Buch "Entwurfsmuster von Kopf bis Fuß".
 

ing0-bing0

Aktives Mitglied
Ich versuchs mal. Am einfachsten könnte man es sich wohl so vorstellen:

Java:
package obs;

public interface Observer {
    void notify(Class<?> invoking, Object msg);
}

Java:
package obs;

import java.util.ArrayList;
import java.util.List;

public class Observable {
    private final List<Observer> observerList = new ArrayList<>();

    public void registerObserver(Observer o) {
        observerList.add(o);
    }

    public void notifyObservers(Class<?> invoking, Object msg) {
        for (Observer o : observerList) {
            o.notify(invoking, msg);
        }
    }
}

Java:
package obs;

public class TestObj extends Observable {
    public void test() {
        this.notifyObservers(this.getClass(), " says hello!");
    }

    public static void main(String[] args) {
        TestObj to = new TestObj();
        to.registerObserver(new Observer() {
            @Override
            public void notify(Class<?> invoking, Object msg) {
                System.out.println(invoking.toString() + msg.toString());
            }
        });

        to.test();
    }
}

TestObj soll überwacht werden. TestObj benachrichtigt alle registrierten Observer. Vorher registriert sich ein Observer bei TestObj. Der benachrichtigte Observer tut etwas mit der Nachricht.

Das ist auch schon alles.
 

Staarfightaar

Bekanntes Mitglied
Java:
public interface Observer {
    void notify(Class<?> invoking, Object msg);
}
wäre wahrscheinlich besser dieses interface bzw klasse als Generic klasse zu implementieren anstatt Object zu verwenden

hierbei vllt den ObjectProperty<???> von javafx vllt anwenden
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
fLooojava MVC Pattern und Observer Pattern Java Basics - Anfänger-Themen 6
A Observer Pattern Problem Java Basics - Anfänger-Themen 15
J Interface Frage zu Interfces am Beispiel Observer Pattern Java Basics - Anfänger-Themen 8
Helgon Observer Pattern - hasChanged() immer false Java Basics - Anfänger-Themen 10
C OOP Observer Pattern Java Basics - Anfänger-Themen 2
K Observer Pattern notifyObservers Java Basics - Anfänger-Themen 9
W Observer-Pattern Java Basics - Anfänger-Themen 3
T Verständnisfrage Observer-Pattern Java Basics - Anfänger-Themen 8
S Observer Pattern notifyObserver Java Basics - Anfänger-Themen 6
M Observer Pattern Java Basics - Anfänger-Themen 14
A MVC Observer Pattern Java Basics - Anfänger-Themen 2
Y Observer update Java Basics - Anfänger-Themen 3
N Observer funktioniert nicht Java Basics - Anfänger-Themen 13
G Observer löst zweimal aus Java Basics - Anfänger-Themen 8
A ein observer "post"problem Java Basics - Anfänger-Themen 3
F Observer Java Basics - Anfänger-Themen 7
U observer thread safe Java Basics - Anfänger-Themen 4
B Wozu Observer? Java Basics - Anfänger-Themen 9
Spin Observer Patteern java Java Basics - Anfänger-Themen 7
O Liste - Observer/Observeable - HashMap Hilfe Java Basics - Anfänger-Themen 19
O Observer - Einfach erklärt? Java Basics - Anfänger-Themen 5
P Fragen zum Observer Muster und Datenbanken Java Basics - Anfänger-Themen 2
T Observer ansprechen Java Basics - Anfänger-Themen 2
R Observer funktioniert nicht. Sehe keine Fehler Java Basics - Anfänger-Themen 2
hdi JList mit Model und Observer -> Chaos, blicke nicht durch Java Basics - Anfänger-Themen 22
hdi Observer als statische Klasse ? Java Basics - Anfänger-Themen 2
N observer frage Java Basics - Anfänger-Themen 2
G Implementierung des Observer/Observable Patterns - Gut so? Java Basics - Anfänger-Themen 3
N observer Java Basics - Anfänger-Themen 12
H [erledigt] Observable/Observer Beobachter entfernen Java Basics - Anfänger-Themen 2
G Unterschied Observer&Observable<->java.beans.Prope Java Basics - Anfänger-Themen 4
G Benötige Hilfe bei Problem mit Observer! Java Basics - Anfänger-Themen 2
E Observer Java Basics - Anfänger-Themen 7
K Observer Observable update() . Java Basics - Anfänger-Themen 13
Y Observer - notifyObservers(Object arg) Java Basics - Anfänger-Themen 4
M Servlets und Observer Java Basics - Anfänger-Themen 2
G Observable/Observer-Patterns Java Basics - Anfänger-Themen 9
G Observable/Observer update wird nicht ausgeführt Java Basics - Anfänger-Themen 9
D was ist der vorteil vom Builder-design pattern? Java Basics - Anfänger-Themen 11
W GoF-Pattern im Programmierer-Alltag Java Basics - Anfänger-Themen 113
D Java Pattern mit X Ausgabe Stern Java Basics - Anfänger-Themen 4
Dimax Erste Schritte Pattern.matcher,die Besonderheiten. Java Basics - Anfänger-Themen 12
N Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
F Design pattern Java Basics - Anfänger-Themen 29
W RegEx Matcher + Pattern und Emails Java Basics - Anfänger-Themen 8
M Schlüsselworte Unterschied: String.matches und Pattern.compile Java Basics - Anfänger-Themen 2
C Best Practice JTable in MVC Pattern Java Basics - Anfänger-Themen 7
D Design Pattern Command Java Basics - Anfänger-Themen 3
Bregedur Methoden Matcher und Pattern bei sich wiederholenden Werten Java Basics - Anfänger-Themen 1
S Regex Pattern Java Basics - Anfänger-Themen 3
Z Pattern und Matcher substring zu String möglich? Java Basics - Anfänger-Themen 4
B Pattern für Email Liste Java Basics - Anfänger-Themen 3
J Builder Pattern implementieren Java Basics - Anfänger-Themen 3
Tarrew Proxy Design-Pattern Java Basics - Anfänger-Themen 1
M Methoden Pattern Matching Vokal Java Basics - Anfänger-Themen 2
agent47 Pattern split Java Basics - Anfänger-Themen 2
J MVC Pattern, mehrere Controller/Views/Models Java Basics - Anfänger-Themen 0
B Strategy Pattern - Rechner Java Basics - Anfänger-Themen 6
I Vertändnisfrage zu Prototype Pattern Java Basics - Anfänger-Themen 0
L Kompositum-Pattern Hilfe :O Java Basics - Anfänger-Themen 4
F eigenes Listener Pattern mit Interface Java Basics - Anfänger-Themen 1
S Je nach erhaltene Daten unterschiedlich reagieren (Design Pattern?) Java Basics - Anfänger-Themen 3
B Pattern Matching ohne Match-Methoden Java Basics - Anfänger-Themen 11
Furtano OOP Memento Pattern | übergabe einer Kopie des Arrays Java Basics - Anfänger-Themen 0
F Erste Schritte Pattern zum Zerlegen von selbstdefinierten Dateinamen Java Basics - Anfänger-Themen 7
M MVC + Strategy Pattern Ansatz (mit Code) Java Basics - Anfänger-Themen 5
A Design Pattern - Welche? Java Basics - Anfänger-Themen 33
Rudolf OOP Übungen zu Design Pattern in Java Java Basics - Anfänger-Themen 6
S OOP Regex Pattern Java Basics - Anfänger-Themen 2
P Grundsatzfrage zu Decorator-Pattern Java Basics - Anfänger-Themen 6
L Pattern Matching Java Basics - Anfänger-Themen 3
L RegExp bzw Pattern in Java Java Basics - Anfänger-Themen 6
R aktualisierung des View im MVC-Pattern Java Basics - Anfänger-Themen 5
M RegEx Pattern Matcher Java Basics - Anfänger-Themen 16
R Pattern bzw. Regex HTML-Code Java Basics - Anfänger-Themen 10
N Regexp Pattern & Matcher Problem Java Basics - Anfänger-Themen 4
I OOP Verständnisfrage zu Singelton Pattern Java Basics - Anfänger-Themen 21
R Welches Design pattern Java Basics - Anfänger-Themen 10
B static und Pattern matching Java Basics - Anfänger-Themen 22
T pattern klappt nicht so Java Basics - Anfänger-Themen 6
T Decorator Pattern Java Basics - Anfänger-Themen 7
A Pattern und Matcher Java Basics - Anfänger-Themen 9
T Frage zu Pattern/Matcher Java Basics - Anfänger-Themen 6
D Pattern in Midi-Sequencer Java Basics - Anfänger-Themen 2
V Frage zu Decorator-Pattern Java Basics - Anfänger-Themen 4
S OOP Factory Pattern Java Basics - Anfänger-Themen 2
M Regex-Pattern Java Basics - Anfänger-Themen 2
Haubitze_Broese Pattern für Links in RSS-Reader Java Basics - Anfänger-Themen 6
Raidri Pattern liefert false Java Basics - Anfänger-Themen 9
megachucky regex-Problem ( mit den Klassen Matcher / Pattern) --> XML prüfen Java Basics - Anfänger-Themen 11
O useDelimiter / Muster im Parameter (Pattern) Java Basics - Anfänger-Themen 6
S Problem mit Pattern Java Basics - Anfänger-Themen 2
S Pattern.matches mit Ignore Case Java Basics - Anfänger-Themen 2
N in int array einen pattern(eine zahl) finden Java Basics - Anfänger-Themen 21
A Hilfe zu Pattern Java Basics - Anfänger-Themen 2
Y Pattern Java Basics - Anfänger-Themen 2
A Proxy Pattern implementieren Java Basics - Anfänger-Themen 2
N OOP MVC Pattern Java Basics - Anfänger-Themen 3
G Probleme mit Pattern und Aussagenlogik Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben