Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: "Christian H. Kuhn" Newsgroups: de.comp.lang.java Subject: Strategy-Objekte Date: Thu, 2 May 2019 22:31:06 +0200 Lines: 48 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: individual.net Ued87f1oN/cr7E/GcK27KgwgHXVjJl7lAuyYEdV47kao7KRS4= Cancel-Lock: sha1:WGVEpYmYtX/XGm+3eE3cG1MYt/o= X-Mozilla-News-Host: snews://news.individual.net:563 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 Xref: csiph.com de.comp.lang.java:13244 Liebe Gemeinde, bevor hier ganz zugemacht wird: Ich bastele an einem Programm zur Verwaltung von Schachturnieren. Die möglichen Ergebnisse einer Partie habe ich in einem Enum Chessresult mit den Werten WIN, DRAW, LOSS dargestellt. Für die Berechnung der Paarungen der nächsten Runde nach Schweizer System ist der aktuelle Punktestand zu bestimmen. Der kann aus diesen drei Werten durch mindestens drei gebräuchliche Wertgruppen berechnet werden: - 1, 0,5, 0 (bei Einzelpartien gebräuchlich) - 2, 1, 0 (eher für Mannschaftskämpfe) - 3, 1, 0 (sowohl bei Einzel- als auch Mannschaftsturnieren gelegentlich anzutreffen) 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? TIA QNo