
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
11.01.2007, 06:36
|
|||
|---|---|---|---|
|
|||
-=Какой паттерн подойдёт?=- |
|||
|
#18+
Задача такая. Есть класс устройства . Устройство может состоять из от 1 до 50 деталей . Причём все детали разные (от разных классов) и выступают тоже в качестве объектов. Сразу возникает такое решение, в классе описать 50 переменных (ссылок на объекты деталей). потом создать конструктор с 50-ми параметрами. Может чтонить есть не такое прямолинейное? Интересно было бы сделать так чтобы при создании объекта Устройства не писать 50 параметров в конструктор, а допустим если у нас устройство из 23 деталей, то нужно записать только 23 параметра. Ещё хорошо былобы чтобы не описывать в классе все 50 переменных а какнить динамически делать чтобы ссылки на них появлялись. Есть какиенить умные мысли, подскажите пожайлуста. Наглядный пример : Класс Компьютер может быть создан с множеством комплектующих , которые могут быть указаны в качестве параметров. Необязательно что итоговый вариант компьютера указан в самом начале работы, комплектующие могут удаляться и создаваться по мере работы с объектом компьютера . Подскажите как наиболее грамотно поступить при решении подобной задачи? Может паттерн есть какойнить подходящий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.01.2007, 07:21
|
|||
|---|---|---|---|
-=Какой паттерн подойдёт?=- |
|||
|
#18+
Ну и используйте некоторый аналог Map (структура "ключ" - "значение"). Пусть каждая деталь, которая состоит из многих деталей реализует некий интерфейс, который позволяет ей добавлять внутренности и обращаться к ним по именам (ключам). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.01.2007, 09:53
|
|||
|---|---|---|---|
|
|||
-=Какой паттерн подойдёт?=- |
|||
|
#18+
mysterioНу и используйте некоторый аналог Map (структура "ключ" - "значение"). Опиши подробнее. Map - это какое-то широко распространённое решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.01.2007, 10:45
|
|||
|---|---|---|---|
-=Какой паттерн подойдёт?=- |
|||
|
#18+
Более проще всего - это вектор (vector) структур из указателей на void* и int-а, идентифицирующего принадлежность к классу детали (назовем Detale) в классе устройства. Конструктору передется вектор int-ов, допустим по которым класс сам определяет, что надо строить. Усложняем... Если все детали будут иметь общий, хотябы пустой интерфейс, то в Detale вместо void * можно прописать этот интерфейс (DetaleInterface), тогда int нам уже не нужен, т.к. можно будет обходится хотябы dynamic_cast-ом. Далее... А может класс избавить от нагрузки индентификации? 1. Создать класс фабрики, которой передается параметр, а она сама строит нужную деталь. Но и о деталях ей не обязательно все знать. Достаточно того, чтобы деталь в фабрике зарегистрировалась, указав свой номер (или имя строкой) и передав указатели на функции создания и удаления ее. Тогда конструктор получая вектор параметров, передает их по одному фабрике, а та уже возвращает созданный объект. Конструктор кладет их в свой вектор Detale. 2. Обращение к объекту. Если общий интерфейс будет содержать все необходимые методы, то приводить к нужному классу не надо. Если же все-таки нужно приводить, то можно приводить в самом классе, а можно и придумать другие способы. Допустим той же фабрике (или придумать другой класс) передать указатель на объект и имя функции (допустим строка) которую надо выполнить (параметры пока не рассматриваем). Фабрика же сама отпределяет класс объекта, а потом вызывает требуемую функциию. Как? Если функция "fync", то фабрика вызывает dynamic_cast<Class1>(obj1)->func(). А параметры можно передавать в виде переменного списка параметров функции, еще одного вектора, ... . Если же фабрика ничего не знает о функциях классов, то классы сами их должны регистрировать в ней путем передачи указателей и идентификаторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=16&mobile=1&tid=1346328]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
166ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
24ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 456ms |

| 0 / 0 |
