Language agnostic 范围及;对象之间的通信
我在Delphi(和Delphi术语)工作,但我的问题是语言中立的 假设您有一个类TClient,它向另一个类TFacade发送消息。我假设TClient实例将有一个类型为TFacade的私有引用变量。TClient中的某个方法将创建TFacade的实例并将其分配给这个私有变量。TClient客户端类需要使用TFacade类 同时,TFacade与其他类(称为WorkerClass1、WorkerClass2和WorkerClass3)一起工作。TFacade实例可能也做同样的事情——它们有私有WorkerClass变量,并创建WorkerClass的实例(可能在TFacade构造函数中)。TFacade类需要使用WorkerClass单元 那么,信息是如何从Workerclass返回到TClient的呢?例如,如果TClient是一个表单,它可能会接收用户输入,TFacade使用用户输入,Workerclass也会使用用户输入。但是,在Workerclass处理或使用信息之后,它们需要将信息传回TClient(即,输出信息将以TClient形式显示) 我希望这是清楚的。基本上我只是问如果Class1调用Class2中的一个方法,Class2调用Class3中的一个方法,Class3如何将信息发送回Class1?既然我是个新手,不要害怕你的回答太简单或太具体。我能应付:-)Language agnostic 范围及;对象之间的通信,language-agnostic,oop,Language Agnostic,Oop,我在Delphi(和Delphi术语)工作,但我的问题是语言中立的 假设您有一个类TClient,它向另一个类TFacade发送消息。我假设TClient实例将有一个类型为TFacade的私有引用变量。TClient中的某个方法将创建TFacade的实例并将其分配给这个私有变量。TClient客户端类需要使用TFacade类 同时,TFacade与其他类(称为WorkerClass1、WorkerClass2和WorkerClass3)一起工作。TFacade实例可能也做同样的事情——它们有私有
谢谢,一如既往——Al C.一种可能的方法是使用回调,请参阅。一种可能的方法是使用回调,请参阅。信息可以在函数参数中传递,也可以通过函数的返回值返回。信息可以在函数参数中传递,它可以通过函数的返回值返回 我希望这是清楚的。基本上我只是问如果Class1调用Class2中的一个方法,Class2调用Class3中的一个方法,Class3如何将信息发送回Class1 但事实并非如此,因为这样会将设计中的类别紧密地结合在一起 相反,Class3只与Class2通信。这样一来,Class1需要对Class3一无所知,反之亦然。通过这种方式,您可以交换Class1和Class3,而不必更改除Class2之外的任何内容 还有其他更高级的习惯用法可以进一步减少耦合,但这就足够了 我希望这是清楚的。基本上我只是问如果Class1调用Class2中的一个方法,Class2调用Class3中的一个方法,Class3如何将信息发送回Class1 但事实并非如此,因为这样会将设计中的类别紧密地结合在一起 相反,Class3只与Class2通信。这样一来,Class1需要对Class3一无所知,反之亦然。通过这种方式,您可以交换Class1和Class3,而不必更改除Class2之外的任何内容
还有其他更高级的习惯用法可以进一步减少耦合,但这对于您来说已经足够开始了。您有许多选择,可以进行权衡。根据您想要实现的目标,某些选项可能不“好”:
- 使用函数参数和返回值移动数据位
- 使用引用/输出参数收集数据
- 使用回调函数/委托
- 使用事件(如果语言支持)
- 使用一个收集所有感兴趣信息的通用实例
- 让class1实现稳定的接口,它可以被class3使用
- 使用中央存储,如公共内存、文件、数据库等
- 检查设计模式
- 检查平台中的习惯用法
- 使用函数参数和返回值移动数据位
- 使用引用/输出参数收集数据
- 使用回调函数/委托
- 使用事件(如果语言支持)
- 使用一个收集所有感兴趣信息的通用实例
- 让class1实现稳定的接口,它可以被class3使用
- 使用中央存储,如公共内存、文件、数据库等
- 检查设计模式
- 检查平台中的习惯用法