![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Неактивный пользователь
Пол:
Регистрация: 05.02.2009
Сообщений: 6
Репутация: 1
|
Подскажите способы реализации фабрик объектов. Так, чтобы новые классы объектов можно было добавлять без изменений в основном коде. Ну или с минимальными изменениями.
|
|
|
|
| Реклама: | Магазин бытовой техники: gorenje gg5a10wh купить - переходи на сайт ТАЙМТВ! | Магазин бытовой техники: телевизор jvc 24 lt 24m590 - переходи на сайт ТАЙМТВ! | nafa05 | купить билет на концерт преснякова в москве | Мебельный магазин: кухонный раздвижной стол купить - Переходи на сайт! |
|
|
#2
|
|
Постоялец
![]() ![]() ![]() ![]() ![]() Пол:
Регистрация: 05.02.2007
Адрес: Москва
Сообщений: 662
Репутация: 271
|
А разве наследование придумано не для этого.
Вы не трогаете базовый класс, а создаете производный, в котором и реализуете изменения
__________________
Сергей Сергеевич |
|
|
|
| Сказали спасибо: |
|
|
#3
|
|
Неактивный пользователь
Регистрация: 23.03.2009
Сообщений: 1
Репутация: 0
|
Андрей Александреску посвятил этому вопросу полсотни страниц в книге "Современное проектирование на С++" (http://www.nowa.cc/showthread.php?t=14475&page=4).
|
|
|
|
|
|
#4
|
|
Неактивный пользователь
Регистрация: 05.04.2009
Сообщений: 4
Репутация: 1
|
Александреску - классная книга, но для поставленного вопроса - слегка убойна. Решение может быть более простым. Действительно делаете класс фабрика, который по запросу Create() возвращает базовый класс. А ля
public Base* Create(string sDerivedClassName); в ентой функции делаете switch() который анализирет, чего попросили и создает объект нужного класса. Типа if(sDerivedClassName=="Дережабль") return new Derejabl(); Он конечно должен быть унаследован из базового. В Create передаете дополнительные параметры (argv) если надо. Более сложная задача загружать новый класс вообще не меняя кода основной программы. Это можно сделать через динамически загружаемую библиотеку с описанием этого нового класса. Но это наверное вам не надо. |
|
|
|
|
|
#5
|
|
Неактивный пользователь
Пол:
Регистрация: 18.04.2009
Адрес: СПб
Сообщений: 41
Репутация: 65
|
Тут нужно хорошо продумать базовый класс для всех фабричных классов. Посмотрите на CRuntimeClass в MFC, макросы DECLARE_DYCREATE и IMPLEMENT_DYNCREATE.
|
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Перетаскивание объектов на странице ... Как? | MrSnaKe | HTML | 7 | 19.02.2010 19:42 |
| Размещение анимированных объектов на веб-странице | kalancha | Вeб Дизайн | 2 | 04.08.2009 13:25 |
| Динамическое создание объектов | Wizard2007 | Java Script | 5 | 25.11.2008 15:46 |
| Вставка объектов в RTFBox | A_Fox | .NET | 2 | 01.04.2008 13:04 |
|
|