オブジェクトのリスト objA があるとします。これで、objA はより多くの objA を作成できるようになり、それらは互いに完全に無関係になります。他の objA の存在について少しでも知る必要はありません。objA をスポナー内に保存せずに、別の objA によって作成された objA を取得するにはどうすればよいですか? objA のリストを表すためにシングルトンを使用したくありません。
例:
class Container
{
list<Monster*> listOfMonsters;
void UpdateAllMonsters()
{
foreach(Monster monster in listOfMonsters)
{
monster.Update();
}
}
};
class Monster
{
void Update()
{
new Monster();
}
};
Update() メソッドで作成された Monster を取得し、Containers listOfMonsters に貼り付けるにはどうすればよいですか? コンテナ オブジェクトのインスタンスを 1 つだけ浮かせておきたいのですが、モンスターがコンテナ オブジェクトに対して何もできないようにする必要があります。
私が考えた1つの解決策は、コンテナとモンスターの間に中間オブジェクトを作成することです。これにより、コンテナオブジェクトのインスタンスは1つだけになり、モンスターは基本的にコンテナオブジェクトの1つのメソッドにしかアクセスできなくなります(これはlistOfMonsters)。
IE;
class Container
{
list<Monster*> listOfMonsters;
void UpdateAllMonsters()
{
foreach(Monster monster in listOfMonsters)
{
monster.Update();
}
}
void AddToList(Monster* monster)
{
listOfMonsters.add(monster);
}
};
class ContainerLiason
{
private __Container*;
AddToContainer(Monster* monster)
{
__Container.AddToList(monster);
}
};
class Monster
{
private ContainerLiason* __liason;
void Update()
{
__liason.AddToContainer(new Monster());
}
};
他のアイデアやデザインパターンはありますか? もう1つ、上記の例はデザインパターンの一種で、そうであれば何と呼ばれますか? シングルトンが何と呼ばれているか、またはそれが何であるかを知る前にシングルトンを使用したので、私はただ尋ねます。