Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / -=Какой паттерн подойдёт?=- / 4 сообщений из 4, страница 1 из 1
11.01.2007, 06:36
    #34247323
xm?!_(mo3roBa9_akTuBHocTb)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-=Какой паттерн подойдёт?=-
Задача такая.
Есть класс устройства . Устройство может состоять из от 1 до 50 деталей . Причём все детали разные (от разных классов) и выступают тоже в качестве объектов.
Сразу возникает такое решение, в классе описать 50 переменных (ссылок на объекты деталей). потом создать конструктор с 50-ми параметрами. Может чтонить есть не такое прямолинейное?

Интересно было бы сделать так чтобы при создании объекта Устройства не писать 50 параметров в конструктор, а допустим если у нас устройство из 23 деталей, то нужно записать только 23 параметра. Ещё хорошо былобы чтобы не описывать в классе все 50 переменных а какнить динамически делать чтобы ссылки на них появлялись. Есть какиенить умные мысли, подскажите пожайлуста.

Наглядный пример : Класс Компьютер может быть создан с множеством комплектующих , которые могут быть указаны в качестве параметров. Необязательно что итоговый вариант компьютера указан в самом начале работы, комплектующие могут удаляться и создаваться по мере работы с объектом компьютера .

Подскажите как наиболее грамотно поступить при решении подобной задачи? Может паттерн есть какойнить подходящий?
...
Рейтинг: 0 / 0
11.01.2007, 07:21
    #34247339
mysterio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-=Какой паттерн подойдёт?=-
Ну и используйте некоторый аналог Map (структура "ключ" - "значение"). Пусть каждая деталь, которая состоит из многих деталей реализует некий интерфейс, который позволяет ей добавлять внутренности и обращаться к ним по именам (ключам).
...
Рейтинг: 0 / 0
11.01.2007, 09:53
    #34247588
xm?!_(mo3roBa9_akTuBHocTb)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-=Какой паттерн подойдёт?=-
mysterioНу и используйте некоторый аналог Map (структура "ключ" - "значение").
Опиши подробнее. Map - это какое-то широко распространённое решение?
...
Рейтинг: 0 / 0
11.01.2007, 10:45
    #34247754
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-=Какой паттерн подойдёт?=-
Более проще всего - это вектор (vector) структур из указателей на void* и int-а, идентифицирующего принадлежность к классу детали (назовем Detale) в классе устройства. Конструктору передется вектор int-ов, допустим по которым класс сам определяет, что надо строить.

Усложняем...

Если все детали будут иметь общий, хотябы пустой интерфейс, то в Detale вместо void * можно прописать этот интерфейс (DetaleInterface), тогда int нам уже не нужен, т.к. можно будет обходится хотябы dynamic_cast-ом.

Далее...

А может класс избавить от нагрузки индентификации?

1. Создать класс фабрики, которой передается параметр, а она сама строит нужную деталь. Но и о деталях ей не обязательно все знать. Достаточно того, чтобы деталь в фабрике зарегистрировалась, указав свой номер (или имя строкой) и передав указатели на функции создания и удаления ее. Тогда конструктор получая вектор параметров, передает их по одному фабрике, а та уже возвращает созданный объект. Конструктор кладет их в свой вектор Detale.

2. Обращение к объекту. Если общий интерфейс будет содержать все необходимые методы, то приводить к нужному классу не надо. Если же все-таки нужно приводить, то можно приводить в самом классе, а можно и придумать другие способы. Допустим той же фабрике (или придумать другой класс) передать указатель на объект и имя функции (допустим строка) которую надо выполнить (параметры пока не рассматриваем). Фабрика же сама отпределяет класс объекта, а потом вызывает требуемую функциию. Как? Если функция "fync", то фабрика вызывает dynamic_cast<Class1>(obj1)->func(). А параметры можно передавать в виде переменного списка параметров функции, еще одного вектора, ... . Если же фабрика ничего не знает о функциях классов, то классы сами их должны регистрировать в ней путем передачи указателей и идентификаторов.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / -=Какой паттерн подойдёт?=- / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]