Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.java > #13248
| From | Patrick Roemer <sangamon@netcologne.de> |
|---|---|
| Newsgroups | de.comp.lang.java |
| Subject | Re: Strategy-Objekte |
| Date | 2019-05-03 14:42 +0200 |
| Organization | news.netcologne.de |
| Message-ID | <qahcur$icg$1@newsreader4.netcologne.de> (permalink) |
| References | <gj12cbF43i4U1@mid.individual.net> <a0jgr3rqix14.hbk5nt6t2bj2.dlg@40tude.net> |
Responding to Joerg Meier:
>> Ich brauche aber gar kein Objekt, es würde mir reichen, wenn score()
>> static wäre. Wenn ich ein Objekt nehme, reicht mir ein Singleton. Und
>> überhaupt haben alle diese Strategien keinen Zustand und sind
>> automatisch immutable.
>
> Die Strategieen SIND aber der state. Also sie selbst beinhalten zwar keinen
> state, aber die Information, welche Strategie genutzt werden soll, muss ja
> irgendwo gespeichert sein. Und wie willst Du die Information, welche Klasse
> Du nutzen moechtest speichern, wenn nicht als Instanz dieser Klasse ?
Das "Problem" ist, dass man mehrere Exemplare dieser Klasse erzeugen
kann, die funktional identisch sind. Das ist undramatisch, aber aus
ästhetischer Sicht etwas störend und könnte in äußerst
unwahrscheinlichen Szenarien tatsächlich zu Problemen führen, etwa wenn
man solche Scorer-Objekte in einem Set hält und dann erwartet, dass jede
Implementierung nur einmal drin sein kann.
Vermeiden kann man das z.B. durch das klassische Singleton-Pattern oder
über "Konstanten" mit anonymen Implementierungen des Interface.
> Klar, Du koenntest eine Class<? extends ResultToScore> strategy; oder so
> speichern, aber das macht es auch nicht viel besser (imo eher noch
> schlechter). Aufrufe von statischen Methoden sind in Java eben nicht
> dynamisch, und ausser mit Reflection kommst Du da auch nicht drum rum.
Man kann sie als Methodenreferenzen auf eine Implementierung des
Scorer-Interface mappen. Die Singleton-Eigenschaft bekommt man damit
allerdings nicht.
> public enum Scoring {
> SINGLE(1, 0.5, 0),
> TOURNEY(2, 1, 0),
> MIXED(3, 1, 0);
[...]
> Statelose Objekte, bei denen nur die Objektidentitaet state ist, sind fuer
> java-Enums der perfekte use case.
Aber nur, wenn die Menge der möglichen Implementierungen fix und
abgeschlossen ist und an einer einzigen Codestelle deklariert werden
kann. Den Weg, mal eben ein 5-1-0-Scoring einzuführen, hat man sich dann
verbaut.
Viele Grüße
Patrick
Back to de.comp.lang.java | Previous | Next — Previous in thread | Next in thread | Find similar
Strategy-Objekte "Christian H. Kuhn" <qno-news@qno.de> - 2019-05-02 22:31 +0200
Re: Strategy-Objekte Patrick Roemer <sangamon@netcologne.de> - 2019-05-03 10:58 +0200
Re: Strategy-Objekte Patrick Roemer <sangamon@netcologne.de> - 2019-05-03 12:32 +0200
Re: Strategy-Objekte Joerg Meier <joergmmeier@arcor.de> - 2019-05-03 13:37 +0200
Re: Strategy-Objekte Patrick Roemer <sangamon@netcologne.de> - 2019-05-03 14:42 +0200
Re: Strategy-Objekte "Christian H. Kuhn" <qno-news@qno.de> - 2019-05-03 19:13 +0200
Re: Strategy-Objekte Thomas Noll <-_tn_-@web.de> - 2019-05-03 17:58 +0000
Re: Strategy-Objekte "Christian H. Kuhn" <qno-news@qno.de> - 2019-05-03 20:58 +0200
Re: Strategy-Objekte "Christian H. Kuhn" <qno-news@qno.de> - 2019-05-03 19:05 +0200
csiph-web