Witam
Piszę turową grę webową w Javie, z wykorzystaniem Springa i Hibernete'a. W grze tej gracz może budować i ulepszać budynki, które z poziomu na poziom stają się coraz droższe, ale zarazem wzrasta ich efektywność: np. farma na poziomie 1 produkuje 15 jednostek, na 2 już 30. Obecnie mam to rozwiązane przez zapis danych w encji Budynek, w której to znajdują się podstawowe informacje takie jak: poziom i właściciel budynku. Gdy chce się np. wyświetlić informacje o danym budynku pobierane są dane z bazy danych, a następnie w fabryce tworzone są obiekty 'pamięciowe', w których znajdują pola zawierające opisy, umiejętności (są to specjalne implementacje interfejsów 'Skill', 'Description') itp. Do tworzenia obiektów wykorzystuję wzorzec Dekorator. Tak wygląda kod fabryki:
public Building create(BuildingType buildingType, int level)
{
Building building = null;
if (buildingType == BuildingType.FARM)
{
building = new Farm();
}
(...)
for (int i = 0; i < level - 1; i++)
{
building = upgrade(building);
}
return building;
}
private Building upgrade(Building building)
{
BuildingType type = BuildingType.valueOf(building.
getDescription().name);
int level = building.getLevel();
switch (type)
{
case FARM:
{
switch (level)
{
case 4:
return new FarmLevel5(building);
default:
return new FarmUpgrade(building);
}
}
(...)
}
Chciałem zapytać czy zaproponowane przeze mnie rozwiązanie ma sens.
Czy może ktoś ma pomysł na inne rozwiązanie problemu? Może dziedziczenie w Hibernetcie i dekorowanie?