Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.java > #13245
| Path | csiph.com!newsfeed.xs4all.nl!newsfeed9.news.xs4all.nl!85.12.16.68.MISMATCH!peer01.ams1!peer.ams1.xlned.com!news.xlned.com!newsreader4.netcologne.de!news.netcologne.de!.POSTED.2001-4dd4-3e7b-0-e12b-774c-9bfe-8880.ipv6dyn.netcologne.de!not-for-mail |
|---|---|
| From | Patrick Roemer <sangamon@netcologne.de> |
| Newsgroups | de.comp.lang.java |
| Subject | Re: Strategy-Objekte |
| Date | Fri, 3 May 2019 10:58:34 +0200 |
| Organization | news.netcologne.de |
| Distribution | world |
| Message-ID | <qagvrq$87u$1@newsreader4.netcologne.de> (permalink) |
| References | <gj12cbF43i4U1@mid.individual.net> |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset=utf-8 |
| Content-Transfer-Encoding | 8bit |
| Injection-Date | Fri, 3 May 2019 08:58:34 -0000 (UTC) |
| Injection-Info | newsreader4.netcologne.de; posting-host="2001-4dd4-3e7b-0-e12b-774c-9bfe-8880.ipv6dyn.netcologne.de:2001:4dd4:3e7b:0:e12b:774c:9bfe:8880"; logging-data="8446"; mail-complaints-to="abuse@netcologne.de" |
| User-Agent | Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.24) Gecko/20100411 Thunderbird/2.0.0.24 Mnenhy/0.7.6.0 |
| In-Reply-To | <gj12cbF43i4U1@mid.individual.net> |
| Content-Language | en-US |
| X-Received-Bytes | 3052 |
| X-Received-Body-CRC | 3389265554 |
| Xref | csiph.com de.comp.lang.java:13245 |
Show key headers only | View raw
Responding to Christian H. Kuhn:
> Das riecht nach dem Strategy Pattern. Also etwa
>
> interface ResultToScore {
> public float score(Chessresult result);
> }
>
> Die einzelnen Strategien möchte ich als nicht-anonyme Klasse definieren.
> Eine Lambda-Expression an geeigneter Stelle liest sich elegant, ist aber
> nicht wiederverwendbar. Egal, wo ich lese, ist die Implementation sowas wie
>
> public class OnePoint implements ResultToScore {
> @Override
> public float score(Chessresult result) {
> switch (result) {
> case Chessresult.WIN: return 1;
> case Chessresult.DRAW: return 0.5;
> case Chessresult.LOSS:
> default: return 0;
> }
> }
> }
>
> 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. Gibt es einen Grund, warum in allen Beispielen,
> die ich finde, die Strategy-Klassen so implementiert werden, dass es von
> jeder verschiedene unterscheidbare Instanzen gibt, obwohl das auch in
> den meisten Beispielen sinnlos ist? Oder mache ich mir zuviel Gedanken?
Irgendwie schon.
Die einfache Klasse dürfte dem Tutorial-Autor schlicht didaktisch
intuitiver vorkommen als ein Mix von Strategy und Singleton. In
"richtigem" Code hätte ich wohl eine leichte Präferenz für die
Singleton-Variante - mehr Boilerplate, aber saubere Objektidentität.
In Scala hingegen gibt es Singletons als Sprachkonstrukt, da hat man
diesen Tradeoff nicht:
<snip>
type ResultToScore = Chessresult => Float
object OnePoint extends ResultToScore {
override def apply(result: Chessresult): Float =
result match {
case Chessresult.WIN => 1
case Chessresult.DRAW => 0.5F
case Chessresult.LOSS => 0
}
}
println(OnePoint(Chessresult.WIN))
</snip>
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