对于那些熟悉中介者模式的人...
我想在 Delphi 中实现 Mediator 模式,但 Delphi 编译器无法处理所需的循环引用。
查看“设计模式”中的原始 GOF 图,Mediator 对每个 Colleague 都有引用,但许多 Colleague 对象都有对 Mediator 的引用。
这在大多数语言中都不是问题,但我的 Delphi 编译器给了我'F2047 Circular unit reference to ...'
这种使用接口的方法有用吗?(看起来很复杂)
我正在使用德尔福 2010
[解决方案总结]
总结一下公认的答案:在允许循环引用的语言中,您可以省略抽象的 Mediator 类(如第 278 页 GoF 的“实现”部分所述)。在没有抽象 Mediator 类的情况下在 Delphi 中实现 Mediator 的唯一方法是将所有类放在一个 Unit中。
否则,除了具体的子类之外,您还需要一个额外的抽象 Mediator 基类。
三个单元的 Uses 子句如下所示:
ConcreteColleage1 使用中介者
ConcreteMediator 使用中介者,ConcreateColleague1
中介者(两者都不使用)
没有循环引用!