Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.java > #13248

Re: Strategy-Objekte

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar


Thread

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