代码之家  ›  专栏  ›  技术社区  ›  Al C

对象之间的范围和通信

  •  0
  • Al C  · 技术社区  · 16 年前

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

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

    同时,Tfacade与其他类一起工作(称为WorkerClass1、WorkerClass2和WorkerClass3)。大概Tfacade实例也做同样的事情——它们有私有的WorkerClass变量,并创建WorkerClass的实例(可能在Tfacade构造函数中)。Tfacade类需要使用WorkerClass单元。

    那么,信息是如何从WorkerClasses返回到TClient的呢?例如,如果tclient是一个表单,那么它可能会接收Tfacade使用的用户输入,而WorkerClasses又会使用这些输入。但是,在WorkerClasses操作或使用信息之后,它们需要将信息传回tclient(即输出信息将以tclient形式显示)。

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

    谢谢,一如既往——艾尔·C。

    4 回复  |  直到 16 年前
        1
  •  2
  •   tpdi    16 年前

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

    它没有,因为这太紧密地结合了你设计中的锁链。

    相反,Class3只与Class2通信。这样,Class1就不需要了解Class3,并且 反之亦然 . 这样,您就可以交换Class1和Class3,而不必更改Class2之外的任何内容。

    还有其他更高级的习惯用法,可以进一步减少耦合,但这足以让您从头开始。

        2
  •  1
  •   isntn    16 年前

    你有很多选择可以选择,但要权衡。有些选项可能不“好”,具体取决于您想要实现的目标:

    • 使用函数参数和返回值移动数据位。
    • 使用引用/输出参数收集数据。
    • 使用回调函数/委托。
    • 使用事件(如果语言支持)。
    • 使用一个收集所有有趣信息的公共实例。
    • 让Class1实现稳定的接口,它可以被Class3使用。
    • 使用中央存储器,如公共存储器、文件、数据库等。
    • 检查设计模式。
    • 检查平台中的习语。
        3
  •  0
  •   lothar    16 年前

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

        4
  •  0
  •   John Saunders    16 年前

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