Какой шаблон дизайна? - PullRequest
       16

Какой шаблон дизайна?

0 голосов
/ 13 сентября 2009

Я ищу пару шаблонов или дизайнерских идей для реализации на C ++, которые позволили бы следующее.

1

  • пул похожих объектов
  • объекты, запрошенные и оставленные клиентом
  • бассейн растет при истощении, не сжимается
  • будет несколько клиентов (по одному пулу на каждого клиента, чтобы избежать мьютекса)

Пул объектов представляется наиболее подходящим.

2

Объекты, полученные из пула, будут обработчиками данных, которые будут динамически объединяться в цепочки. Каждый объект будет выполнять некоторую операцию, которая может или не может изменить данные перед передачей данных (или они могут завершить цепочку).

Это требование немного застряло. Я рассматривал что-то вроде модифицированной Цепочки ответственности , где данные будут переданы всем.

Тем не менее, я настороженно отношусь к простому срыву паттерна и предполагаю, что это лучший подход, поэтому я буду признателен за некоторые отзывы, альтернативные идеи и использование опыта других!

Спасибо

Стюарт.

Спасибо за отзыв:

Объекты выполняют декодирование / анализ / преобразование данных в реальном времени. Пул будет содержать объекты различных объектов, производных от одного базового класса.

Плоскость управления будет динамически создавать и инициализировать цепочку объектов и объектов в соответствии с внешними критериями.

Формат данных может быть явно указан / обновлен при прохождении через объекты. Однако это изолированно и не имеет большого значения, как это было известно при создании цепочки.

Паттерн стратегии заслуживает некоторого изучения.

Ответы [ 3 ]

0 голосов
/ 13 сентября 2009

Похоже, вы определили шаблоны клавиш, за исключением того, что я не уверен, как «объекты в пуле» различаются между собой (если они есть), т. Е. Как каждый объект узнает, что он может выполнять различную обработку перед передачей (возможно, измененных) данных следующему объекту в цепочке (или разрыву цепочки)? Если объекты находятся в пуле, то я думаю, что они должны быть недифференцированными и неразличимыми. Итак, вам нужен шаблон Strategy , чтобы такие идентичные объекты выполняли различную обработку и логику ...?

0 голосов
/ 13 сентября 2009

пул "похожих" объектов? Природа пулов заключается в том, что когда вы запрашиваете предмет из пула, вы не знаете, какой из них вы получаете. Так что похожих недостаточно, они должны быть одинаковыми.

Но тогда они скованы? Так они разные? Поэтому, когда вы получаете объект, вы каким-то образом «настраиваете» его. И эту конфигурацию можно отменить, чтобы объект мог быть возвращен в пул?

Итак, мой первый вопрос: почему бы просто не «новый» объект, когда вы хотите его, и удалить его, когда закончите (или сделать gc-ed)?

Вы не говорите, что подталкивает вас к идее пула. Является ли стоимость создания этих объектов очень высокой? Шаблоны нуждаются в контексте, вы не предоставили достаточно информации, чтобы позволить нам прокомментировать целесообразность пула.

Мысль: Шаблон == Код, Код == Ошибка. Меньше кода == меньше ошибок. Сохраняйте это простым, если можете.

Идея цепочки ответственности звучит правдоподобно, но опять же вы не даете достаточно информации. Имеет ли значение последовательность «цепочка»? Как это определяется? Это меняется со временем? Это действительно цепь или больше как «сеть». Все ли объекты преобразуют данные? Каковы последствия выполнения преобразования, может ли это повлиять на то, как предыдущие элементы в цепочке будут думать об объекте?

Похоже, вы имеете в виду очень гибкую обработку. Вы строите чрезмерную гибкость? Какие требования привели к этой концепции "цепочки"?

0 голосов
/ 13 сентября 2009

Вам необходимо дать более подробную информацию о том, как эти объекты будут использоваться. Есть ли взаимодействие?

Вам также понадобится менеджер для управления жизненным циклом объектов (создание, распространение). Менеджер обычно реализуется как singleton ... Также рассмотрим шаблон builder для создания объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...