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

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

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

Сообщение Brainenjii » 28.04.2011 15:39:55

В общем, такая проблема... Имеется управляющий класс (что-то вроде фабрики):
Код: Выделить всё
  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 сигнализирует о необходимости пересмотреть структуру классов?
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

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

Сообщение daesher » 28.04.2011 15:47:50

Решение - предварительно объявить BManagerClass так:
Код: Выделить всё
type
BManagerClass = class;

И всё. Только не забудьте потом этот класс окончательно описать
daesher
постоялец
 
Сообщения: 221
Зарегистрирован: 09.03.2010 22:17:14

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

Сообщение Brainenjii » 28.04.2011 16:51:07

Спасибо. Как понимаю, для этого метода описание BManagerClass и BItemClass должно быть в одном модуле?
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

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

Сообщение daesher » 28.04.2011 19:25:55

Да, иначе не выйдет. Но с разными модулями есть и другой способ: "циклические сслыки" (правда, в одном из модулей придётся ограничиться секцией implementation).
daesher
постоялец
 
Сообщения: 221
Зарегистрирован: 09.03.2010 22:17:14


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

Рейтинг@Mail.ru