我不想创建与World
绑定的Actors
。我正在考虑使用以下两个代码片段之一。其中哪一个被认为是更好的设计?我的意思是,对于源代码维护者来说更具可读性,对于只读代码的人更具可读性,对未来调整更灵活等。哪些设计更好?
对不起,如果有类似问题已经被询问,但我不知道真的不知道这个概念在OOP中被称为什么。
选项A:
// declaration:
class World {
public:
RegisterActor(Actor* a);
};
class Actor {
public:
Actor(World& w) {
w.RegisterActor(this);
}
foo();
};
// usage:
World myWorld;
Actor myActor(myWorld);
myActor.foo();
选项B:
// delcaration:
class Actor;
class World {
public:
Actor& CreateActor();
}
class Actor {
friend class World;
public:
foo();
private:
Actor();
};
// usage:
World myWorld;
Actor& myActor = myWorld.CreateActor();
myActor.foo();
无论如何,你在演员和世界之间都有循环依赖。你确定你需要吗? –
不一定。选项A从不存储对世界的引用,在选项B中,“演员”从来不知道任何有关“世界”的内容。基本上我想要的是一个对象'World',它包含一个关于'World'中所有'Actor'的列表。但是,未来可能需要循环依赖。一个“演员”可能必须与所有其他的“演员”互动。 –
但在代码中存在循环依赖关系。 “演员”需要知道“世界”,反之亦然。这通常是一个坏主意。 –