Hey,
ich habe ein recht interessantes und schwer zu fassendes Problem mit meinem Klassen-Design (deshalb auch der etwas nichts-aussagende Titel).
Ich versuche das Problem im folgenden gleich mit dem Anwendungsbeispiel zu verdeutlichen.
Es geht im Allgemeinen um das Sortieren von Helden mit verschiedenen Eigenschaften bei gegebenem Gegner. Ein Held ist dabei charakterisiert durch eine Menge von Eigenschaften. Eine Eigenschaft bekommt letztendlich den Gegner übergeben und entscheidet auf Grundlage dessen, ob die Eigenschaft förderlich, neutral oder nicht förderlich ist.
So berechnet sich dann schließlich der Wert des Helden aus allen seinen Eigenschaften.
Eine Eigenschaft oder auch Fähigkeit besitzt also eine Methode, die (momentan noch) eine 1 für förderlich, eine 0 für neutral oder eine -1 für nicht förderlich zurückgibt. In meinem aktuellen Design habe ich dies als Interface designed:
Nun ist mir aber aufgefallen, dass keine Eigenschaft in irgendeiner Weise von den Attributen des Helden abhängig ist. Sie könnte also statisch definiert sein, weil sie lediglich von dem Gegner abhängt. Die Auswertung jedoch wird für jede Eigenschaft anders geprüft.
Bekanntlich kann man ja aber keine statischen Methoden abstrakt vererben. Somit stehe ich vor dem Dilemma, dass ich entweder meine evaluate-Methode nicht statisch deklarieren kann oder einen Helden nicht wie folgt implementieren kann:
Ich bin bei meiner Recherche nach ähnlichen Problemen auf das AbstractFactory-Pattern gestoßen. Entweder habe ich das nicht richtig verstanden oder es passt nicht richtig zu meinem Problem.
Stehe ich vielleicht gerade auf dem Schlauch und gibt es ein gutes Design für meine Zwecke?
Oder würdet ihr sagen, ihr verzichtet auf die statische Deklarierung und würdet jedes Mal ein Objekt von der entsprechenden Ability erzeugen?
Grüße,
Naryxus
ich habe ein recht interessantes und schwer zu fassendes Problem mit meinem Klassen-Design (deshalb auch der etwas nichts-aussagende Titel).
Ich versuche das Problem im folgenden gleich mit dem Anwendungsbeispiel zu verdeutlichen.
Es geht im Allgemeinen um das Sortieren von Helden mit verschiedenen Eigenschaften bei gegebenem Gegner. Ein Held ist dabei charakterisiert durch eine Menge von Eigenschaften. Eine Eigenschaft bekommt letztendlich den Gegner übergeben und entscheidet auf Grundlage dessen, ob die Eigenschaft förderlich, neutral oder nicht förderlich ist.
So berechnet sich dann schließlich der Wert des Helden aus allen seinen Eigenschaften.
Eine Eigenschaft oder auch Fähigkeit besitzt also eine Methode, die (momentan noch) eine 1 für förderlich, eine 0 für neutral oder eine -1 für nicht förderlich zurückgibt. In meinem aktuellen Design habe ich dies als Interface designed:
Java:
public interface Ability {
int evaluate(Enemy enemy);
}
Nun ist mir aber aufgefallen, dass keine Eigenschaft in irgendeiner Weise von den Attributen des Helden abhängig ist. Sie könnte also statisch definiert sein, weil sie lediglich von dem Gegner abhängt. Die Auswertung jedoch wird für jede Eigenschaft anders geprüft.
Bekanntlich kann man ja aber keine statischen Methoden abstrakt vererben. Somit stehe ich vor dem Dilemma, dass ich entweder meine evaluate-Methode nicht statisch deklarieren kann oder einen Helden nicht wie folgt implementieren kann:
Java:
public class Hero {
Set<Ability> abilities;
}
Ich bin bei meiner Recherche nach ähnlichen Problemen auf das AbstractFactory-Pattern gestoßen. Entweder habe ich das nicht richtig verstanden oder es passt nicht richtig zu meinem Problem.
Stehe ich vielleicht gerade auf dem Schlauch und gibt es ein gutes Design für meine Zwecke?
Oder würdet ihr sagen, ihr verzichtet auf die statische Deklarierung und würdet jedes Mal ein Objekt von der entsprechenden Ability erzeugen?
Grüße,
Naryxus