Я пытаюсь применить шаблон легковеса в программе, которая генерирует облака. У меня есть класс, который представляет внутренние c состояния облаков. Тип облака определяется его атрибутами:
class CloudType {
float size;
float altitude;
String color;
String texture;
public void display(x, y) {}
}
class ConcreteCloud {
float x;
float y;
CloudType cloudType;
void display() {
cloudeType.display(x, y);
}
}
Я хотел бы создать фабрику CloudType, которая принимает эти характеристики в качестве аргументов и возвращает соответствующий экземпляр CloudType, если он существует, иначе создайте и сохраните его заранее.
class CloudTypeFactory {
// SomeContainer<CloudType> container;
public CloudType getCloudType(float size, float altitude, String color, String texture) {
CloudType instance = // container get corresponding cloudType
if (instance == null) {
instance = new CloudeType(size, altitude, color, texture);
container.add(instance);
}
return instance;
}
}
Проблема:
У меня есть сомнения относительно того, какой контейнер использовать и, следовательно, самой архитектуры. Можно использовать HashSet, но сложность поиска становится пропорциональной количеству атрибутов в CloudType, что кажется неправильным. В примерах, которые я читал в Интернете, авторы используют HashMap с ключом, являющимся именем CloudType: это противоречит цели IMO, поскольку в этом случае может быть бесконечное количество типов облаков.