Шаблон стратегии с производными алогрифмами, вызывающими методы в контексте

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

Однако реализованные стратегии должны иметь возможность вызывать действия и методы в классе контекста. Я думал о передаче контекста как самого интерфейса для инкапсулированных алгоритмов.

Это лучший подход? Если нет, то что бы вы порекомендовали?

введите здесь описание изображения


person vondip    schedule 31.12.2012    source источник
comment
Я бы сказал, что это хороший подход с использованием внедрения зависимостей. Таким образом, поведение не должно отслеживать тип контекста, а просто должно гарантировать, что действие/метод доступно для объекта класса контекста.   -  person Ravi Y    schedule 31.12.2012
comment
Можете ли вы дать более подробную информацию о классе Context? Или включить его в аналогию с космическим кораблем?   -  person Robben_Ford_Fan_boy    schedule 31.12.2012


Ответы (2)


То, что вы планируете сделать, кажется мне прекрасным. Одна вещь, которую следует учитывать, — это не слишком много передавать методу (ам) вашего класса (ов) поведения. Например, если у вашего космического корабля есть engine behaviour, передайте ему только fuel tank и drive unit, а не весь космический корабль.

person Jeroen De Dauw    schedule 01.01.2013

В зависимости от того, для чего вашим стратегиям нужен контекст, вы можете подумать о том, чтобы сделать его основанным на событиях, используя шаблон Observer, чтобы ваши стратегии не были связаны с контекстом.

Например, если ваши стратегии заставляют что-то измениться в вашем контексте, это могут быть события, на которые подписывается какой-то посредник (или сам ваш контекст).

person Tony Day    schedule 31.12.2012