假设我有一个对象列表 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 中?我只想要一个 Container 对象的实例漂浮在周围,而怪物不应该对容器对象做任何事情。
我想到的一种解决方案是在 Container 和 Monster 之间创建一个中间对象,这样就只有 Container 对象的一个实例,并且 Monster 基本上只能访问 Container 对象的一种方法(这将添加到怪物列表)。
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());
}
};
还有其他想法或设计模式吗?还有一件事,上面的例子会是一种设计模式吗?如果是,它会被称为什么?我只是问,因为我在知道它们被称为什么甚至它们是什么之前就使用过单例。