我有一些需要互相通信的类。问题在于,如果让其中一个包含另一个(子父关系),那么事情就变得棘手了。你要么需要将父实例传递到子对象中(那么如果你正在使用依赖注入,哪个应该先创建呢?),要么可以使用委托/事件。但我想强制执行这样一个事实:父对象必须能够处理子对象引发的事件。我不太确定如何做到这一点。我也不希望事件有多个订阅者。
父子关系对于双向通信来说感觉不太对。不幸的是,并不总是有一个对象始终启动,而另一个对象则作出响应。任何一个都可以启动,而另一个应该作出响应。
是否有其他模式我没有注意到?
更新: 抱歉这很难解释。我忘记添加一个细节,即当一个类向另一个类发送消息时,它并不期望立即接收响应。响应以异步方式到达,这就是为什么您需要父实例来调用正确的方法或委托/事件。抱歉下面的示例是伪代码。希望这足以传达思想。我应该看中介者模式吗?
父子关系对于双向通信来说感觉不太对。不幸的是,并不总是有一个对象始终启动,而另一个对象则作出响应。任何一个都可以启动,而另一个应该作出响应。
是否有其他模式我没有注意到?
更新: 抱歉这很难解释。我忘记添加一个细节,即当一个类向另一个类发送消息时,它并不期望立即接收响应。响应以异步方式到达,这就是为什么您需要父实例来调用正确的方法或委托/事件。抱歉下面的示例是伪代码。希望这足以传达思想。我应该看中介者模式吗?
public class Foo
{
public void SendMessageAToBar()
{
MessageA msg = new MessageA();
Bar.ReceiveMessageAFromFoo(msg);
}
public void ReceiveMessageARespFromBar(MessageAResp msgResp)
{
//Got a response do something
}
public void ReceiveMessageBFromBar(MessageB msg)
{
//Do something msg
MessageBResp msgBResp = new MessageBResp();
Bar.ReceiveMessageBRespFromFoo()
}
}
public class Bar
{
public void ReceiveMessageAFromFoo(MessageA msg)
{
//DO something.
MessageAResp resp = new MessageAResp();
Foo.ReceiveMessageARespFromBar(resp);
}
public void SendMessageBToFoo()
{
MessageB msg = new MessageB();
Foo.ReceiveMessageBFromBar(msg);
}
public void ReceiveMessageBRespFromFoo(MessageBResp msgResp)
{
//Got a response do something
}
}