请告诉我在以下情况下该怎么做。
class A {
B* b;
public:
A() {
b = new B(*this);
}
B* getB();
}
class B {
A& a;
public:
B(A& a) {
this->a = a;
}
void foo() {
/*
вызов функции из другой библиотеки
для вызываемой функции важно знать
некоторые поля объекта a
*/
}
}
int main() {
A* a = new A();
a->getB()->foo();
}
在我看来,两个类的对象的相互存储不是一个好主意。A类是主要的,由几十个与B类似的类组成。也就是说,在每个像B的类中,都必须存储对A类对象的引用。同时,B类不能没有A类而存在,并且类 A 很容易在没有类 B 的情况下存在。因此,在一种情况下使用引用,在另一种情况下使用指针。
为什么我将 B 类逻辑与 A 类分开?不幸的是,B 类包含太多实现某些任务的方法。对此,我认为不值得杀掉A类,但是把它单独分成一个类是有道理的。
事实上,在内心深处,希望这种情况有某种模式。但是,翻阅模式列表,我没有找到类似的东西......
如果 B 只需要 A 的一些方法,那么它不需要知道(并且依赖于 A)。创建一个接口,可以从 A 给 B 所需的东西:
现在 B 不依赖于 A。A 和 B 依赖于
SomePortionOfA
。我们刚刚所做的称为依赖倒置。