Ist das ein Design Pattern? (Name gesucht)



  • Hallo,

    die meisten von euch kennen doch das Observer Pattern. Soweit ich weis registrieren sich mehrere Objekte beim Observer und teilen ihm mit, wenn ein Ereignis eintrat.

    Jetzt habe ich hier ein ähnliches Konstrukt. Es gibt z.B. 4 Objekte. Jedes Objekt kennt die anderen und führt deren Referenz in einem Array mit. Ändert sich jetzt der Inhalt von einem Objekt (oder es tritt halt ein anderes Ereignis ein), dann teilt dieses allen anderen diese Änderung mit. Wenn ich jetzt 10 Objekte auf diese Weise miteinander verknüpfe, dann hat jedes Objekt die 9 Referenzen auf die anderen Objekte.

    Ist das eigentlich auch ein Pattern? Und wenn ja, welches? 😕 Ich hoffe ich konnte mich verständlich ausdrücken.



  • Hab das noch nie gesehen.

    Ist es zwingend notwenig, daß es keinen Chef gibt? Normalerweise würde ich dem Chef bescheidsagen und der sagt es allen Mitarbeitern weiter außer dem, der gesendet hat. So wie ein Switch im LAN.



  • Hört sich für mich ersteinmal nach einem Anti-Pattern an.
    Beim Hinzufügen eines weiteren Objekts, müsste ja jedes andere Objekt aktualisiert werden (also insgesamt quadratischer Aufwand), d.h. dies kann ja nur zu Inkonsistenzen führen.



  • Chris++ schrieb:

    Ist das eigentlich auch ein Pattern? Und wenn ja, welches? 😕 Ich hoffe ich konnte mich verständlich ausdrücken.

    Naja, dann ist eben jedes Objekt Observable und Observer gleichzeitig.
    Diese "Vollvernetzung" hört sich aber nicht gerade gut an...



  • Hm... dann habt ihr mein Gefühl gleich mal bestätigt. Ich denke auch das hier ein richtiger Observer besser wäre. 👍



  • Und die Patterns ohne und mit Chef nennen wir "Basar" und "Kathedrale". 🤡 🤡

    Chris++ schrieb:

    Hm... dann habt ihr mein Gefühl gleich mal bestätigt. Ich denke auch das hier ein richtiger Observer besser wäre. 👍

    Das würde ich gar nicht mal beschwören. Weil ich kaum an Patterns und Anti-Patterns glaube.

    Die Implentierung mit den vielen Arrays und quadratischem Aufwand riecht auch nicht gut. Aber was, wenn man keinen Chef haben mag, weil man nicht weiß, wer den Chef besitzt? Anscheinend gibt es ja viele Erzeuger der Objekte, vielleicht erzeugen sie sich auch gegenseitig, anderenfalls hättest Du einen Chef (der Erzeuger) gehabt, der auf ganz natürliche Weise sich als Telefonzentrale aufgedrängt hätte.

    Wo ist der Chef? Der erste Klient erschafft ihn sich durch einen Glaubensakt und alle (auch die kommenden) Klienten teilen sich ihn über smart-Pointer? Oder doch einen Basar entstehen lassen als intrusiven doppelt verketten nichtleeren Ring?



  • Hört sich für mich auch nach einem Anti Pattern an. Wie wärs stattdessen mit einem Blackboard?



  • Also zur Zeit ist es so, dass alle "koppelbaren" Objekte direkt oder indirekt von der selben Basisklasse erben. Die Kopplung ist optional und die Objekte erzeugen sich auch nicht gegenseitig. Ich habe mir jetzt überlegt, dass man den Observer zum Zeitpunkt der Kopplung anlegen kann:

    someObject.link(otherObject);
    someObject.link(yetAnotherObject);
    

    someObjekt legt jetzt intern einen Observer an (speichert die Referenz in einem Member) und registriert das otherObjekt (sowie alle anderen) bei ihm. Das ganze ist auch noch in Java implementiert ... also müsste ich mir irgendwas überlegen, um die Referenzen am Ende aufzuräumen damit der GC auch mal Speicher frei gibt.

    Auf jedenfall ist die jetztige Variante nicht so optimal. Ziel ist ja, wenn sich ein Objekt ändert (someObject oder auch otherObject), dass sich alle anderen irgendwann synchronisieren. Im Moment muss ich halt ein Array durchgehen und jedes Objekt nach einer Änderung abfragen. Mit dem Observer bräuchte ich nur eine Prüfung.

    Mechanics schrieb:

    Hört sich für mich auch nach einem Anti Pattern an. Wie wärs stattdessen mit einem Blackboard?

    Von dem Blackboard habe ich noch nichts gehört. Das schaue ich mir auf jedenfall mal an... schon allein weil ich es noch nicht kenne.

    volkard schrieb:

    als intrusiven doppelt verketten nichtleeren Ring?

    Hier muss ich mich auch erstmal einlesen wie der Ring funktioniert ...

    Aber erstmal danke für die Vorschläge 👍



  • Chris++ schrieb:

    volkard schrieb:

    als intrusiven doppelt verketten nichtleeren Ring?

    Hier muss ich mich auch erstmal einlesen wie der Ring funktioniert ...

    Ist nicht dringend, da Du Java nimmst. Da macht man das besser mit Patterns und Anti-Patterns. (Und UML natürlich.)



  • Peer2Peer-Network



  • Java ... also müsste ich mir irgendwas überlegen, um die Referenzen am Ende aufzuräumen damit der GC auch mal Speicher frei gibt

    Java hat kein Problem mit zyklischen Referenzen.


Anmelden zum Antworten