范围&对象之间的通信

时间:2009-04-10 23:09:42

标签: language-agnostic oop

我在Delphi(和Delphi术语)工作,但我的问题是语言中立。

假设您有一个类TClient,它将消息发送到另一个类TFacade。我假设TClient实例将具有TFacade类型的私有引用变量。 TClient中的某个方法将创建TFacade的实例并将其分配给此私有变量。 TClient客户端类需要使用TFacade类。

同时,TFacade与其他类(称为WorkerClass1,WorkerClass2和WorkerClass3)一起使用。据推测,TFacade实例做同样的事情 - 它们有私有的WorkerClass变量,并创建WorkerClasses的实例(可能在TFacade构造函数中)。 TFacade类需要使用WorkerClass单元。

那么信息如何从WorkerClasses返回到TClient?例如,如果TClient是一个表单,它可能会收到TFacade使用的用户输入 - 然后由WorkerClasses使用。但是,在WorkerClasses操作或使用信息之后,他们需要将信息传递回TClient(即,输出信息将以TClient形式显示)。

我希望这很清楚。基本上我只是问Class1是否在Class2中调用一个方法,而Class2在Class3中调用一个方法,Class3如何将信息发送回Class1?由于我是新手,所以不要害怕在回答中过于简单或过于具体。我可以处理它: - )

一如既往地感谢 - Al C.

4 个答案:

答案 0 :(得分:2)

  

我希望这很清楚。基本上我只是问Class1是否在Class2中调用一个方法,而Class2在Class3中调用一个方法,Class3如何将信息发送回Class1?

它没有,因为你的设计中的条纹太紧密了。

相反,Class3仅与Class2通信。这样,Class1不需要对Class3一无所知,而反之亦然。这样,您可以换掉Class1和Class3,而无需更改除Class2之外的任何内容。

还有其他更高级的习语用于进一步减少耦合,但这足以让你开始。

答案 1 :(得分:1)

您有多种选择可供选择,需要权衡利弊。根据您想要实现的目标,某些选项可能不是“好”:

  • 使用函数参数和返回值来移动数据位。
  • 使用reference / out参数收集数据。
  • 使用回调函数/代理。
  • 使用事件(如果语言支持)。
  • 使用一个收集所有有趣信息的常见实例。
  • 让class1实现稳定的接口,可以由class3使用。
  • 使用中央存储,如通用内存,文件,数据库等。
  • 检查设计模式。
  • 检查平台中的习语。

答案 2 :(得分:0)

一种可能的方法是使用回调,请参阅http://en.wikipedia.org/wiki/Callback_(computer_science)

答案 3 :(得分:0)

信息可以在函数参数中传递,并且可以通过函数的返回值返回。