gpt4 book ai didi

java - 当一个对象要向对象发送消息时,该方法应该放在哪里?

转载 作者:行者123 更新时间:2023-11-30 03:44:23 24 4
gpt4 key购买 nike

假设您创建了两个对象:objectA 和 objecB。如果 objectA 需要向 objectB 发送消息,应该是这样的:

objectA.theMessage(objectB)

或者像这样:

objectB.theMessage(objectA)

一个更具体的例子:

Publisher p;
Subscriber s;

// way 1
p.addSubscriber(s);

// way 2
s.subscribeTo(p);

如您所见,两个消息(函数)的语义是相同的,只是函数应该位于何处的问题。

是否有明确规定应该做什么的硬性规定?或者是否有一个通用指南可以帮助您确定哪个是更好的设计?或者这是一个个案的事情并且不存在一般准则吗?如果是这样,你能解释一下我什么时候使用它们吗?您能想出每一种的潜在优势/劣势吗?

非常感谢您的时间和知识!

最佳答案

这里的区别在于您更喜欢推模式还是拉模式。哪一个更适合在很大程度上取决于应用程序。 “推”基本上意味着 AB 发送消息,而“拉”意味着 BA 获取消息.

如前所述,没有一般规则,但通常可以用常识回答问题。考虑一个例子:今天早上我和我的家人吃早餐。以前,我不得不开车去面包店买面包(这是在德国,我们喜欢我们的 Brötchen)。另一方面,我早餐时看的报纸是送纸人送来的。这个设置是合适的:是我想要面包,所以我做了一些工作来得到它们,但我可能会懒得出去买报纸(除非它可以在面包店获得)。另一方面,如果面包已经送来而报纸没有送来,我最终会得到更贵的面包而没有报纸。愚蠢的例子结束。

那么,这对您的设计意味着什么?必须将消息从 A 发送到 B 的人触发它。根据我的经验,这通常是接收者,这就是为什么拉模式通常是首选(而且,它更容易进行懒惰评估——只在真正需要时获取消息)。但正如所说,这实际上取决于应用程序。做出你的选择:-)

关于java - 当一个对象要向对象发送消息时,该方法应该放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35518945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com