雲を生成するプログラムに flyweight パターンを適用しようとしています。雲の本質的な状態を表すクラスがあります。雲のタイプは、その属性によって定義されます。
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 の属性の数に比例するため、正しくないようです。私がオンラインで読んだ例では、作成者は CloudType の名前をキーとして HashMap を使用しています。