Path: csiph.com!news.dns-netz.com!news.freedyn.net!newsreader4.netcologne.de!news.netcologne.de!.POSTED.2001-4dd4-3e7b-0-e12b-774c-9bfe-8880.ipv6dyn.netcologne.de!not-for-mail From: Patrick Roemer Newsgroups: de.comp.lang.java Subject: Re: Strategy-Objekte Date: Fri, 3 May 2019 12:32:38 +0200 Organization: news.netcologne.de Distribution: world Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Date: Fri, 3 May 2019 10:32:38 -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="12830"; 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: Content-Language: en-US Xref: csiph.com de.comp.lang.java:13246 Responding to Christian H. Kuhn: > Das riecht nach dem Strategy Pattern. Also etwa > > interface ResultToScore { > public float score(Chessresult result); > } [...] > Ich brauche aber gar kein Objekt, es würde mir reichen, wenn score() > static wäre. Ergänzend: Du kannst das natürlich auch basierend auf Methodenreferenzen implementieren... public static final class OnePoint { private OnePoint() {} public static float score(Chessresult result) { switch(result) { case WIN: return 1; case DRAW: return 0.5F; case LOSS: return 0; default: throw new IllegalStateException(); } } } ...und dann "OnePoint::score" verwenden, wo ein ResultToScore benötigt wird. Das Strategy-Pattern ist damit weniger deutlich erkenntlich, aber das ist eher ein Feature als ein Bug - Patterns sind halt Workarounds um Unzulänglichkeiten der Sprache... Leider hat man damit immer noch keinen knackigen, atomaren Namen für die Implementierung - statt "new OnePoint()" oder "OnePoint.INSTANCE" jetzt halt "OnePoint::score". In Scala könnte man die Methode (oder Funktion) onePoint() nennen und ins Package-Objekt packen. Viele Grüße Patrick