Паттерны
Юрий ЛогиновСтратегия
Позволяет определить семейство схожих алгоритмов, с целью последующей инкапсуляции их в отдельных классах, закрытые интерфейсом. В процессе выполнения данные алгоритмы можно заменять "на лету".
Применять:
- Когда нужно использовать разные вариации алгоритма внутри одного объекта
- Если есть множество похожих классов, отличающихся лишь некоторым поведением. Тогда это поведение можно вынести в отдельный интерфейс, а классы свести к одному.
- Когда не нужно отображать детали реализации алгоритмов другим классам.
- Когда различные вариации алгоритмов реализованы в виде условных операторов.
Плюсы:
- Горячая замена алгоритмов "на лету".
- Изолирует алгоритмы от других классов.
- Уход от наследования.
- Реализует принцип O/C
Минусы:
- Усложняет программу за счет новых классов
- Клиент должен понимать разницу между разными вариантами алгоритмов.
Декоратор
Позволяет добавлять объектам новую функциональность, оборачивая их в так называемые "обертки".
Применять:
- Когда нужно добавить объекту обязанностей на лету, незаметно для кода, который их использует.
- Когда нельзя расширить обязанности путем наследования (класс имеет ключевое слово final).
Плюсы:
- Большая гибкость
- Добавление обязанностей на лету
- Можно добавлять комбинировать обязанности
- Несколько мелких классов на все случаи жизни
Минусы:
- Трудно конфигурировать большие комбинации
- Может быть много мелких классов