Oop 对象之间的消息传递-如何引用目标对象?

Oop 对象之间的消息传递-如何引用目标对象?,oop,message-passing,Oop,Message Passing,面向对象环境中最基本的任务是对对象执行方法。要做到这一点,必须对调用方法的对象进行引用。建立此引用的正确方法是将对象作为参数传递给调用对象的构造函数(或初始值设定方法)吗 如果objectfoo调用objectbar,那么(在伪代码中)这样说是否正确: 如果需要来回传递消息,会发生什么情况?是否需要注册目标对象的方法 foo = new fooClass() bar = new barClass() foo.register(bar) bar.register(foo) 有一种模式可以解决这

面向对象环境中最基本的任务是对对象执行方法。要做到这一点,必须对调用方法的对象进行引用。建立此引用的正确方法是将对象作为参数传递给调用对象的构造函数(或初始值设定方法)吗

如果object
foo
调用object
bar
,那么(在伪代码中)这样说是否正确:

如果需要来回传递消息,会发生什么情况?是否需要注册目标对象的方法

foo = new fooClass()
bar = new barClass()

foo.register(bar)
bar.register(foo)

有一种模式可以解决这个问题吗?

嗯,根据消息传递的级别,您可以实现消息传递服务。对象侦听消息,或在某些MessageProvider上注册为MessageListener


java,如果两个对象相互引用,那么在大多数情况下,我会考虑循环依赖关系。

依赖注入框架,并通过使用代理可以提供一个解决Java中周期依赖关系的解决方案,代理可以在第一次需要时解析消息的接收方。然而,这不是一个普遍适用的OO模式

一般来说,依赖注入是一种方法。如果您只是在谈论两个对象的通信,那么将其中一个对象的实例作为参数传递给另一个对象,如第一个示例所示。传入构造函数以确保引用始终有效。否则,您必须进行测试以确保已调用寄存器。此外,您还需要确保多次调用注册表不会产生不良影响

如果您想要一个控制对象,其他对象向其注册事件,该怎么办。然后可以使用Register方法(可以添加到委托中)


请参见

一种对象类型可以是另一种对象类型的工厂。当Foo弹出一个新条时,连接已经建立:

foo = new Foo();
bar = Foo.Poop();

function Foo::Poop()
{
    bar = new Bar(this);
    myChildren.Add(bar);
    return bar;
}

bar.SayHiToParent();
foo.SayHiToChildren();

我认为这在很大程度上取决于两个物体之间的确切关系

谢谢!如果您有许多对象可以响应的消息,这将是有意义的。我更感兴趣的是一般情况下,两个物体非常紧密地耦合在一起并相互交谈。OOP-101类型的东西。:)谢谢我花了一点时间看春天,但不多。我一定会更深入地看一看。
foo = new Foo();
bar = Foo.Poop();

function Foo::Poop()
{
    bar = new Bar(this);
    myChildren.Add(bar);
    return bar;
}

bar.SayHiToParent();
foo.SayHiToChildren();