2009-04-10 89 views
0

我正在使用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?由于我是新手,不要害怕在回复中过于简单或过于具体。我能应付:-)

感谢一如既往 - 铝C.

回答

2

我希望这很清楚。基本上,我只是问,如果Class1在Class2中调用方法,并且Class2在Class3中调用方法,Class3如何将信息发回给Class1?

它没有,因为这太紧紧地耦合了设计中的claase。

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

还有其他更高级的成语,用于进一步减少耦合,但这对于您来说已经足够了。

0

信息可以通过函数参数传递,它可以通过函数的返回值返回。

1

您有多种选择可供选择,并进行权衡。有些选项可能不是“好”这取决于你想要达到什么目的:

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