Читайте также: |
|
Используйте паттерн стратегия, когда:
Q имеется много родственных классов, отличающихся только поведением. Стратегия позволяет сконфигурировать класс, задав одно из возможных поведений;
Паттерны поведения
Q вам нужно иметь несколько разных вариантов алгоритма. Например, можно определить два варианта алгоритма, один из которых требует больше времени, а другой - больше памяти. Стратегии разрешается применять, когда варианты алгоритмов реализованы в виде иерархии классов [НО87];
О в алгоритме содержатся данные, о которых клиент не должен «знать». Используйте паттерн стратегия, чтобы не раскрывать сложные, специфичные для алгоритма структуры данных;
Q в классе определено много поведений, что представлено разветвленными условными операторами. В этом случае проще перенести код из ветвей в отдельные классы стратегий.
Структура
Участники
Q Strategy (Compositor) - стратегия:
- объявляет общий для всех поддерживаемых алгоритмов интерфейс. Класс
Context пользуется этим интерфейсом для вызова конкретного алгорит
ма, определенного в классе ConcreteStrategy;
Q ConcreteStrategy (SimpleCompositor, TeXCompositor, ArrayCompositor) - конкретная стратегия:
- реализует алгоритм, использующий интерфейс, объявленный в классе
Strategy;
Q Context (Composition) - контекст:
- конфигурируется объектом класса ConcreteStrategy;
- хранит ссылку на объект класса Strategy;
- может определять интерфейс, который позволяет объекту Strategy по
лучить доступ к данным контекста.
Отношения
Q классы Strategy и Context взаимодействуют для реализации выбранного алгоритма. Контекст может передать стратегии все необходимые алгоритму данные в момент его вызова. Вместо этого контекст может позволить обращаться к своим операциям в нужные моменты, передав ссылку на самого себя операциям класса Strategy;
Q контекст переадресует запросы своих клиентов объекту-стратегии. Обычно клиент создает объект ConcreteStrategy и передает его контексту, после
Дата добавления: 2015-09-11; просмотров: 70 | Поможем написать вашу работу | Нарушение авторских прав |