我正在尝试在生成云的程序中应用享元模式。我有一个代表云的内在状态的类。云类型由其属性定义:
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 的目的,因为在这种情况下可能有无限数量的云类型。