Suche passendes design pattern...
-
Hallo Community,
also ich habe gerade folgende Situation: in meinem Modell für ein zukünftiges Programm habe ich eine verschiedene Klassen, die wissen müssen welche Instanzen der anderen Klassen gerade existieren.
Diese Klassen exisitieren:
FirstDerived -> BaseClass
SecondDerived -> BaseClass
WorkerDer "Worker" hält die Instanzen der Abgeleiteten Klassen (First & Second). Während der Laufzeit kommen welche hinzu und andere werden zerstört.
Doch die "FirstDerived" Klassen müssen wissen, welche Instanzen der "SecondDerived" Klassen gerade existieren (und andersrum).Jetzt könnte ich im Worker jedesmal wenn eine Klasse konstruiert wird allen anderen bescheid geben. Aber das wäre bei sehr sehr vielen Instanzen absolut ineffizient und meiner Meinung nach keine schöne Lösung.
Gibt es ein Pattern das ich im Zusammenhang mit diesem Problem nutzen könnte? Ich bin für jeden Tipp dankbar...
-
Hm, Observer oder Mediator könnten hier evtl. interressant sein.
Aber wenn jede Instanz von X jede von Y kennen muss, ist vielleicht auch die Überlegung sinnvoll, ob das nicht umgangen werden kann.
Da der Worker eh alle instanzen kennt, wäre es evtl. sinnvoll wenn X und Y nur den Worker kennen, und dann jeweils nachrichten an die anderen Instanzen schicken können.
-
Tobias W schrieb:
Der "Worker" hält die Instanzen der Abgeleiteten Klassen (First & Second). Während der Laufzeit kommen welche hinzu und andere werden zerstört.
Doch die "FirstDerived" Klassen müssen wissen, welche Instanzen der "SecondDerived" Klassen gerade existieren (und andersrum).Jetzt könnte ich im Worker jedesmal wenn eine Klasse konstruiert wird allen anderen bescheid geben. Aber das wäre bei sehr sehr vielen Instanzen absolut ineffizient und meiner Meinung nach keine schöne Lösung.
Dann müssen sich halt die Instanzen bei Bedarf beim Worker über die vorhandenen Instanzen informieren. Und der gibt dann halt eine Liste bzw. einen Iterator zurück. So wird nur Rechenzeit verbraucht, wenn wirklich eine Information benötigt wird.
-
Das sind im Prinzip gute Ansätze, nur leider muss X zu jeder Instanz von Y Informationen speichern. Hierbei handelt es sich um eine "Verteilungstabelle".
Wenn ich das ganze nur über den Worker abwickle, fehlt mir die Möglichkeit zur Informationsspeicherung.
Wäre eine "globale" Tabelle, auf die neben dem Worker auch X und Y zugreifen eine annehmbare Lösung? Oder ist das keine schöne Lösung?
-
Tobias W schrieb:
Das sind im Prinzip gute Ansätze, nur leider muss X zu jeder Instanz von Y Informationen speichern. Hierbei handelt es sich um eine "Verteilungstabelle".
Jedes X speichert infos zu jedem Y?
Evtl. könnte man es so machen, das jedes X ein Proxyobjekt zu Y hält, welches dann auch die Informationen speichert, sofern es nicht relevant für andere X Objekte ist.
Die eigentlichen Instanzen hält dann immer noch der Worker.
proxy<Y,YData> würde dann Y kennen, die zusätzlichen Daten speichern. Wenn alle X alle Y kennen, muss er nicht "sein" X kennen, da das ja über den Worker bei Änderungen laufen würde.Wäre eine "globale" Tabelle, auf die neben dem Worker auch X und Y zugreifen eine annehmbare Lösung? Oder ist das keine schöne Lösung?
Worker selbst könnte ein Singleton sein, wobei es ja aber durchaus auch mal mehrere Worker geben kann.
phlox
-
Also das mit dem Proxyobjekt hab ich nicht ganz kapiert. Ich verstehe nicht genau was du unter "Proxyobjekt" verstehst.
Einfach eine Struktur (oder Klasse), welche die Möglichkeit bietet Informationen zu Y zu speichern? Falls ja bleibt doch das ursprüngliche Problem bestehen: wie erkenne ich neue oder entfernte Y Instanzen...
PS: vielen Dank für eure Mühe!
-
Tobias W schrieb:
Also das mit dem Proxyobjekt hab ich nicht ganz kapiert. Ich verstehe nicht genau was du unter "Proxyobjekt" verstehst.
http://de.wikipedia.org/wiki/Stellvertreter_(Entwurfsmuster)
^ungefähr dieses Hier.Einfach eine Struktur (oder Klasse), welche die Möglichkeit bietet Informationen zu Y zu speichern? Falls ja bleibt doch das ursprüngliche Problem bestehen: wie erkenne ich neue oder entfernte Y Instanzen...
Jein. Ein Proxy verhält sich wie ein Objekt, reicht aber alles an dieses Weiter. Bei deinem Fall könnte man es aufbohren, und das Proxyobjekt könnte noch Metadaten halten, welche zum Objekt gehören aus der Sicht des X Objektes.
Neue oder entfernte Y Instanzen:
Neue Y Instanzen müsstest du dann in einer Fabrik erzeugen, und danach für jedes X Objekt noch mals ein passendes ProxyObjekt. Dies kann aber der Worker übernehmen.
Fast das selbe spiel beim entfernen, der Worker kann alle X instanzen benachrichtigen das Instanz Y42 zerstört wurde.
-
Klingt sinnvoll. Werde es dann mal so modellieren und schauen ob es sich gut integrieren lässt.
Nochmals vielen Dank für die große Hilfe!