Вопрос касающийся проектирования классов |
Здравствуйте, гость ( Вход | Регистрация )
Вопрос касающийся проектирования классов |
wiz29 |
16.9.2010, 9:56
Сообщение
#1
|
Старейший участник Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: 12 |
Есть вопрос для обсуждения.
Имеется IFactory- что соответсвенно является некой фабрикой объектов, имеется IObject-интерфейс объекта, которые может создавать фабрика. Примерный код (упрощенный вариант для фабрики)
Вопрос в следующем, насколько оправдано иметь указатель на объект создающей его фабрики в IObject? есть ли вообще смысл его там сохранять? (мое мнение нет смысла, но хотелось бы обсудить) Поясню слова:
Извиняюсь за офтоп.
Причина редактирования: смелее пользуйся тегами
|
|
|
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, 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 |
дык, фабрика всегда знает, что она будет создавать. а у приложения есть экземпляры фабрик, оно к ним обращается через интерфейс. а вот зачем самим реализациям знать, как именно они были созданы - это непонятно.
такая ссылка на собственный класс или на класс-фабрику понадобилась бы при древообразных структурах с однотипными элементами или, скажем, при какой-то замысловатой рекурсии. а в других случаях такие ссылки как-то не пригождаются вообще. или я не совсем понимаю, что автор вопроса хотел изобразить. |
|
|
Текстовая версия | Сейчас: 30.11.2024, 14:30 |