Главные принципы
- Выделить изменяемое и инкапсулировать эти аспекты;
- Программировать на уровне интерфейсов, а не на уровне реализаций;
- Отдавать предпочтение композиции перед наследованием;
Недостатки
- Наследование не позволяет менять поведение в время выполнения;
✅ Strategy
🔲 Decorator