Hallo!
Zerbreche mir gerade darüber den Kopf, wie ich Folgendes designtechnisch am besten umsetzen kann:
Um das Ganzen mal zu abstrahieren und aus dem konkreten, größeren Kontext zu reißen, habe ich das Ganze mal als ein einfaches Beispiel formuliert:
In einem Spiel habe ich einen Helden, der Items tragen kann. Es gibt schon einige vorkonfigurierte Items, aber es sollen auch Items erst zur Laufzeit erstellt werden. Items werden nicht nur vom Spieler, sondern auch von anderen Klassen benutzt.
Dies ist die Klasse Item:
Für die fixen Items könnte ich nun eine Klasse erstellen, die viele Konstanten hält, also z.B.:
Nun kann ich sowohl mit
neue Items erstellen, als auch mit
auf bestehende zugreifen.
Dies wäre der erste Ansatz, der mir einfiel, aber seit Java 1.5 gibt es ja Enums, die man, so weit ich weiß, möglichst anstatt von vielen Konstanten verwenden sollte.
Angenommen, ich schreibe nun Item als Enum:
Nun kann ich zwar immer noch bequem auf die existierenden Items zugreifen mit
, aber ich kann keine neuen Gegenstände mehr zur Laufzeit erstellen.
Gibt es eine Möglichkeit, mein obiges Anliegen mit enums zu bewältigen oder muss ich bei den Konstanten bleiben?
Zerbreche mir gerade darüber den Kopf, wie ich Folgendes designtechnisch am besten umsetzen kann:
Um das Ganzen mal zu abstrahieren und aus dem konkreten, größeren Kontext zu reißen, habe ich das Ganze mal als ein einfaches Beispiel formuliert:
In einem Spiel habe ich einen Helden, der Items tragen kann. Es gibt schon einige vorkonfigurierte Items, aber es sollen auch Items erst zur Laufzeit erstellt werden. Items werden nicht nur vom Spieler, sondern auch von anderen Klassen benutzt.
Dies ist die Klasse Item:
Java:
public class Item
{
private String name;
private double weight;
public Item(String name, double weight)
{
this.name = name;
this.weight = weight;
}
public String getName()
{
return name;
}
public double getWeight()
{
return weight;
}
}
Für die fixen Items könnte ich nun eine Klasse erstellen, die viele Konstanten hält, also z.B.:
Java:
class Items
{
public static final Item POTION = new Item("Potion", 5),
SWORD = new Item("Sword", 44); //und noch mehr
}
Nun kann ich sowohl mit
Code:
new Item("Thing", 44)
Code:
Items.POTION
Dies wäre der erste Ansatz, der mir einfiel, aber seit Java 1.5 gibt es ja Enums, die man, so weit ich weiß, möglichst anstatt von vielen Konstanten verwenden sollte.
Angenommen, ich schreibe nun Item als Enum:
Java:
public enum Item
{
POTION("Potion", 4),
SWORD("Sword", 44);
private String name;
private double weight;
Item(String name, double gewicht)
{
this.name = name;
this.weight = gewicht;
}
public String getName()
{
return name;
}
public double getWeight()
{
return weight;
}
}
Nun kann ich zwar immer noch bequem auf die existierenden Items zugreifen mit
Code:
Item.POTION
Gibt es eine Möglichkeit, mein obiges Anliegen mit enums zu bewältigen oder muss ich bei den Konstanten bleiben?