Шаблон стратегии определяет семейство алгоритмов, инкапсулирует каждый
один, и делает их взаимозаменяемыми. Стратегия позволяет варьировать алгоритм
независимо от клиентов, которые его используют.
Очень мило. Но рассмотрим следующую ситуацию: у меня есть шаблон стратегии с несколькими подклассами контекста и несколькими алгоритмами, как показано ниже. Код должен быть закрыт для модификации в конце, но мне все еще нужно иметь возможность достичь следующих расширений. Без изменений в существующий код:
- Добавить новые методы к
Context
, которые используют Стратегию
- Добавить новые подтипы
Context
Я думал о Посетитель , что хорошо для достижения 1). Но добавление новых подтипов Context
потребует изменений во всех Visitor
s, поэтому это не работает.
А как насчет Декоратор ? Украсив Context
, вы можете добавить новые методы. Но что мне действительно нужно, так это добавить методы с конкретными реализациями, которые могут варьироваться, как в шаблоне стратегии.
Как вы думаете, как этого достичь?
С уважением
richn
EDIT:
Это конкретный пример.
Я должен объяснить: у меня есть приложение с окном моделирования, показывающим различные виды VisibleObject
с, и другое окно для управления этими объектами.
Состояние VisibleObject
s должно быть отражено в симуляции с использованием стратегии. Например, если я отключу Polygon
, он должен быть скрыт в симуляции или полностью удален, в зависимости от его конкретного DisablingBehavior
.
Если новый тип VisibleObject
, скажем, Picture
определен, я хочу, чтобы все существующие DisablingBehaviors
и PositioningBehaviors
могли с ним справиться.
И если есть новая операция, скажем, MirrorObject()
, которую необходимо выполнить на VisibleObjects
Я хочу иметь возможность определять различные MirroringBehaviors
поведения, такие как AxisMirroring
или PointMirroring
, и назначать их VisibleObject
s.