Страница 1 из 1

Фабрика и Объект

СообщениеДобавлено: 28.04.2011 15:39:55
Brainenjii
В общем, такая проблема... Имеется управляющий класс (что-то вроде фабрики):
Код: Выделить всё
  Type BManagerClass = Class
    Private
      ...
    Public
      Function BuildItem: TItemClass;
      ...
End;

И есть собственно управляемый класс:
Код: Выделить всё
  Type BItemClass = Class
    Private
      ...
    Public
      ...
End;

Очень хочется иметь в управляемом классе что-то вроде
Код: Выделить всё
...
  Property Manager: BManagerClass Read bManager;
...

т.е. чтобы управляемый объект знал о свойствах фабрики, его создавшей... Но при этом, чтобы обеспечить работу Function BuildItem: TItemClass; мне нужно объявить BItemClass перед BManagerClass. Но тогда BItemClass не будет ничего знать о BManagerClass и желаемое свойство Manager: BManagerClass окажется недоступным...
Как правильно разрешить эту проблему? Сейчас я замещаю кошерную Function BuildItem: TItemClass на Constructor BItemClass.Build(aManager: BManagerClass); что представляется мне не совсем правильным ^_^ Или ситуация, когда BItemClass требует информации о BManagerClass сигнализирует о необходимости пересмотреть структуру классов?

Re: Фабрика и Объект

СообщениеДобавлено: 28.04.2011 15:47:50
daesher
Решение - предварительно объявить BManagerClass так:
Код: Выделить всё
type
BManagerClass = class;

И всё. Только не забудьте потом этот класс окончательно описать

Re: Фабрика и Объект

СообщениеДобавлено: 28.04.2011 16:51:07
Brainenjii
Спасибо. Как понимаю, для этого метода описание BManagerClass и BItemClass должно быть в одном модуле?

Re: Фабрика и Объект

СообщениеДобавлено: 28.04.2011 19:25:55
daesher
Да, иначе не выйдет. Но с разными модулями есть и другой способ: "циклические сслыки" (правда, в одном из модулей придётся ограничиться секцией implementation).