组成。传回变量

时间:2011-04-11 21:17:22

标签: multithreading oop composition

假设您有两个A和B类。如果两者之间的关系是-a

即。 A有一个B

如何将信息从B传递到A?比如在B中说出你计算出来并需要A中的答案。

除了将指向A类的指针传递给B类并调用一个以答案作为参数的函数之外,还有其他方法吗?

希望这是有道理的,

MD。

抱歉,我应该更具体

引用我的评论。

“好吧我给出了一个简单的例子。我在java中编程,我的类B运行一个新的线程并且将计算答案。因此我不能只调用A类中的函数,因为我不知道什么时候计算将完成。“

3 个答案:

答案 0 :(得分:4)

A中需要计算结果的方法应该调用B中进行计算的方法。

这个答案很明显,可能有些东西你没告诉我们(?)

好的,问题就在于线程问题。是的,然后传递对所有者对象的引用并回调它可能是个好主意。更好的想法可能是返回封装计算结果的future object

答案 1 :(得分:1)

如果我理解正确,你就有这种关系:

class Car {
    Engine engine;

    int test() {
        int fuelLevel = engine.getFuelLevel();

        // do sth with fuel level, store it, use it etc.
   }
}

此示例显示如何在两个类之间传递信息:例如,作为函数的结果。 Car对象(您的A类)调用Engine对象(B类)上的方法,并通过这种方式获取所需信息。这可以很容易地转化为B类所做的任何工作。

答案 2 :(得分:1)

管理“异步”调用基本上有两种方法。 第一个是回调和另一个轮询。 有一个回调是你所描述的。当B完成后,它需要以某种方式调用A它已经完成。这可以通过“给”A到B的地址来完成,因此它知道要调用什么,或者使用中间对象C,它同步调用B并将结果发送回A.然后需要知道A.

轮询是指如果B已经完成,则定期检查。这种解决方案在智力上通常不太令人满意,而且CPU消耗更多。 B完成时也不会通知您。 (当B完成时,没有任何事情发生,你将不得不等待下一次民意调查才能意识到这一点)。但是,通过这种方式,B不需要了解A。

我会使用带有中间对象的第一个模式(和特殊的C类)。这样你的模型仍然是干净的(B不需要知道A或C)。我建议您查看Observer pattern