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


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

Re: Strategy-Objekte

From Joerg Meier <joergmmeier@arcor.de>
Newsgroups de.comp.lang.java
Subject Re: Strategy-Objekte
Date 2019-05-03 13:37 +0200
Message-ID <a0jgr3rqix14.hbk5nt6t2bj2.dlg@40tude.net> (permalink)
References <gj12cbF43i4U1@mid.individual.net>

Show all headers | View raw


On Thu, 2 May 2019 22:31:06 +0200, Christian H. Kuhn wrote:

> 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 ?

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.

Als alternativer Vorschlag, wie Du Dein Problem elegant schreiben
koenntest:

public enum Scoring {
	SINGLE(1, 0.5, 0), 
	TOURNEY(2, 1, 0), 
	MIXED(3, 1, 0);

	private final double win;
	private final double draw;
	private final double loss;

	private Scoring(double win, double draw, double loss) {
		this.win = win; this.draw = draw; this.loss = loss;
	}

	public double score(Chessresult result) {
		switch (result) {
			case WIN:	return win;
			case DRAW:	return draw;
			case LOSS:
			default:	return loss;
		}
	}
}

Dann einfach Scoring scoring = SINGLE; double points =
scoring.score(result);

Statelose Objekte, bei denen nur die Objektidentitaet state ist, sind fuer
java-Enums der perfekte use case.

Liebe Gruesse,
		Joerg

-- 
Ich lese meine Emails nicht, replies to Email bleiben also leider
ungelesen.

Back to de.comp.lang.java | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


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