delphi - 在Delphi中实现Mediator模式而不会出现循环引用

标签 delphi mediator

对于那些熟悉中介者模式的人...

我想在Delphi中实现Mediator模式,但是Delphi编译器无法处理所需的循环引用。

查看“设计模式”中的原始 GOF 图,Mediator 具有对每个 Colleague 的引用,但许多 Colleague 对象都具有对 Mediator 的引用。

这在大多数语言中都不是问题,但我的 Delphi 编译器给我“F2047 循环单元引用...”

this approach ,使用接口(interface),有什么用吗? (看起来很复杂)

我使用的是Delphi 2010

[解决方案摘要]

总结一下已接受的答案:在允许循环引用的语言中,您可以省略抽象 Mediator 类(如 GoF 第 278 页的“实现”部分中所述)。 在没有抽象 Mediator 类的情况下,在 Delphi 中实现 Mediator 的唯一方法是将所有类放在一个单元中

否则,除了具体子类之外,您还需要一个额外的抽象 Mediator 基类。

这三个单元的 Uses 子句如下所示:

ConcreteColleage1 使用中介器
ConcreteMediator 使用调解器、ConcreateColleague1
中介者(两者都不使用)

没有循环引用!

最佳答案

使用接口(interface)当然可以帮助减少单元之间的依赖性。另一种方法是使用抽象基类来定义类之间的交互方法,然后将具体的后代放在单独的单元中。

参见:How to avoid circular unit reference?有关如何避免 Delphi 中的循环引用的更多信息。

关于delphi - 在Delphi中实现Mediator模式而不会出现循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4790402/

相关文章:

c# - 从 Dll 导出接口(interface)。 C# Delphi VB C++ 等

c - Delphi - 如何将 'Type' 作为参数传递

delphi - 为什么在 64 位 Windows 中运行时有 2 GB 内存限制?

WSO2。如何将 SOAP 消息转换为 XML 并将其发送到服务?

delphi - 如何测试 Interbase 中是否存在表?

delphi - Delphi 的 x86 代码生成器框架

c++ - 来自抽象类的 shared_ptr

javascript - 是否推荐使用中介者模式?

WPF MVVM 对话框示例

java - 中介者设计模式: Why do classes have to inform mediator of their behaviours?