Реализация шаблона посредника в Delphi без получения циклических ссылок

Для тех, кто знаком с шаблоном посредника ...

Я хочу реализовать шаблон посредника в Delphi, но компилятор Delphi не может обрабатывать требуемые циклические ссылки.

Глядя на исходную диаграмму GOF из «Шаблонов проектирования», посредник имеет ссылку на каждого Коллеги, но многие объекты Коллеги имеют обратную ссылку на Посредника.

Это не проблема для большинства языков, но мой компилятор Delphi дает мне «F2047 Circular unit reference to ...»

Будет ли этот подход , использующий интерфейсы, хоть сколько-нибудь полезным? (кажется сложным)

Я использую Delphi 2010

[ Краткое изложение решения ]

Чтобы подвести итог принятому ответу: на языках, допускающих циклические ссылки, вы можете опустить абстрактный класс Mediator (как описано в разделе " Реализация »в GoF на стр. 278). Единственный способ реализовать Mediator в Delphi без абстрактного класса Mediator - это объединить все ваши классы в один модуль .

В противном случае вам понадобится дополнительный абстрактный базовый класс Mediator в дополнение к конкретному подклассу.

Ваши предложения Uses для трех модулей будут выглядеть следующим образом:

ConcreteColleage1 Uses Mediator
ConcreteMediator использует посредника, ConcreateColleague1
Посредник (тоже не использует)

Нет циклических ссылок!

8
задан Community 23 May 2017 в 12:31
поделиться