Дизайн шаблона для этого? - PullRequest
       12

Дизайн шаблона для этого?

3 голосов
/ 08 сентября 2011

У меня есть массив объектов. Я хочу пройти через несколько шагов, которые изменят каждый объект в массиве. Эти шаги не зависят друг от друга и не все могут быть использованы в каждом случае. Ищите шаблон дизайна, который мог бы описать это поведение.

Спасибо

Ответы [ 8 ]

11 голосов
/ 08 сентября 2011

Возможно, вы ищете шаблон Посетитель .

2 голосов
/ 08 сентября 2011

Мне кажется, вы описываете конвейер.

Одна запись по этому шаблону http://stevenatkinson.wordpress.com/2009/03/02/pipeline-design-pattern/.

2 голосов
/ 08 сентября 2011

Я бы использовал шаблоны Composite и Command. Каждая из ваших дискретных операций будет экземпляром Command, реализованным в методе execute, указанном шаблоном. Я бы использовал Composite, потому что вы хотите выполнить более 1 команды. По сути, у вас будет «составная команда», которую вы применяете к каждому элементу массива.

1 голос
/ 02 февраля 2013

Возможно, вам следует взглянуть на схему «цепи ответственности».Цель этого шаблона очень близка (если не равна) тому, что вы выражаете.Цепочка ответственности состоит из нескольких общих элементов, которые могут обработать запрос.В вашем случае запрос - это ваш массив;каждая команда может изменить массив;после обработки массива каждая команда вызывает следующую команду в цепочке ответственности.

Этот шаблон очень четко объясняется в «шаблоне проектирования» GoF.

1 голос
/ 08 сентября 2011

Посетитель - хороший выбор для выполнения операции.

1 голос
/ 08 сентября 2011

Выполнение операции с каждым объектом коллекции -> Итератор или Посетитель

Инкапсуляция серии операций -> Команда

0 голосов
/ 10 декабря 2014
0 голосов
/ 28 октября 2011

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

...