crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Вопрос касающийся проектирования классов
wiz29
  опции профиля:
сообщение 16.9.2010, 9:56
Сообщение #1


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Есть вопрос для обсуждения.
Имеется IFactory- что соответсвенно является некой фабрикой объектов, имеется IObject-интерфейс объекта, которые может создавать фабрика.
Примерный код (упрощенный вариант для фабрики)
class IFactory
{
       public:
            ...
            virtual IOBject* create(const typeId& objectTypeId) = 0;
            ...
};


Вопрос в следующем, насколько оправдано иметь указатель на объект создающей его фабрики в IObject? есть ли вообще смысл его там сохранять? (мое мнение нет смысла, но хотелось бы обсудить)
Поясню слова:
class IObject
{
       public:
            ...
            virtual IFactory* getFactory() = 0;
            ...
};

Извиняюсь за офтоп.
Причина редактирования: смелее пользуйся тегами
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.9.2010, 10:33
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


по идее объект вообще неимеет представления о том, как, где, когда и кем он был создан.
Представь себе класс, который был написан до того, как возникла необходимость написать фабрику.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 16.9.2010, 10:43
Сообщение #3


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Цитата(Litkevich Yuriy @ 16.9.2010, 11:33) *
по идее объект вообще неимеет представления о том, как, где, когда и кем он был создан.
Представь себе класс, который был написан до того, как возникла необходимость написать фабрику.

Это было одним из первых моих доводов против, но есть и другие:)


однако есть в подходе иметь указатель на интерфейс фабрики и свои плюсы, но сложно в пределах языка вообще реалзиловать такую структуру, да и для понимания пользователя не айс (пользователя интерфайса). Опять таки , наличие фабрики, как правило не предполагает создания объектов вне фабрики, впрочем как и удаление.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.9.2010, 12:05
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


если делать указатель на фабрику, то получится, что производимый фабрикой класс будет привязан к фабрике. А это противоречит идее фабрики.

У тебя исчезнет возможность создать в будущем другую фабрику
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 16.9.2010, 13:29
Сообщение #5


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


наличие интерфейса к фабрике, чисто априорно предполагает, что реализаций этого интерфейса может быть несколько,
приведу пример: 1 . имеется интерфейс для реализации неких объектов IObject.
2. имеется интерфейс фабрики IObjectFactory для управления созданием , копированием, удалением IObject*.
Столкнулся с плагинной системой для реализации неких тулов, тул может в себе реализовать множество своих объектов IObject* и фабрику для управления ими IObjectFactory, что вполне логично. Приложение же, например, может, загружая несколько разных экземпляров IObjectFactory, создавать некое множество объектов порождаемых разными IObjectFactory.

Вот на уровне приложения может существовать некий обобщенный объект FactoryManager для конкретного типа интерфейсов фабрик и он, скорее всего, будет являтся синглтоном (я так понимаю ты именно это имел ввиду)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 20.9.2010, 19:03
Сообщение #6


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


дык, фабрика всегда знает, что она будет создавать. а у приложения есть экземпляры фабрик, оно к ним обращается через интерфейс. а вот зачем самим реализациям знать, как именно они были созданы - это непонятно.
такая ссылка на собственный класс или на класс-фабрику понадобилась бы при древообразных структурах с однотипными элементами или, скажем, при какой-то замысловатой рекурсии. а в других случаях такие ссылки как-то не пригождаются вообще.
или я не совсем понимаю, что автор вопроса хотел изобразить.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 14:28