Подскажите как использовать
От: Аноним  
Дата: 06.09.11 09:33
Оценка:
Вот есть в программе иерархия стратегий. И в базовой есть методы СоздатьОперацию, Переместить, Отменить. В производной стратегии нужно иметь список созданных операций. Вот сейчас этот список я разместил непосредственно в стратегии. Но получилось что она разрослась методами типа НайтиКолвоОперациПоТипу и т.п. Вот думаю вынести в отдельный класс методы получающие инфу о списке сохданных Операций. Но сразу возникае вопрос. Если надо отменить все Операции. Это делать в самой стратегии или в этом Списке? Если в самой стратегии то получается необходимо знать внутренее устройство Списка. А если в списке то надо передавать ссылку на Стратегию (ведь в её базовом классе есть метод Отменить). Как такое палвильно сделать?
Re: Подскажите как использовать
От: -VaS- Россия vaskir.blogspot.com
Дата: 10.09.11 06:34
Оценка:
Список — основной класс, манипулирующий Операциями (создание, перемещение, отмена). В него передается конкретная стратегия, управляющая единичными операциями на низком уровне (в конструктор, или в каждый метод — если стратегии меняются динамически). Стратегия про список не знает. У списка также есть небольшое количество групповых методов типа find_operations(predicate), cancel_operations(predicate).
Re[2]: Подскажите как использовать
От: Аноним  
Дата: 12.09.11 06:00
Оценка:
Здравствуйте, -VaS-, Вы писали:

VS>Список — основной класс, манипулирующий Операциями (создание, перемещение, отмена). В него передается конкретная стратегия, управляющая единичными операциями на низком уровне (в конструктор, или в каждый метод — если стратегии меняются динамически). Стратегия про список не знает. У списка также есть небольшое количество групповых методов типа find_operations(predicate), cancel_operations(predicate).


Так стратегия про список знать не может. Список имеет общие операции типа переместить все, добавить, найти. А в какой последовательности это делать знает тока стратегия
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.