Контекст, который мне больше всего знаком с принципом единой ответственности, связан с общим дизайном системы и может дополнить шаблон стратегии в отношении группировки компонентов в системе.
Используйте шаблон стратегии, чтобы определить набор алгоритмов, которые клиент использует взаимозаменяемо, тогда принцип единой ответственности можно использовать для определения, где группировать клиента и алгоритмы, которые клиент использует в системе. Вам не нужно беспокоить код для алгоритма A, если ваша работа только в алгоритме B и наоборот. Для скомпилированных языков это может оказать существенное влияние на сложность цикла перефакторинга, версии и развертывания. Зачем версировать и перекомпилировать клиент и алгоритмы A, C и D, когда требуются только изменения в алгоритме B.
При таком понимании принципа единой ответственности я не вижу, где наличие класса, реализующего шаблон стратегии, нарушает SRP. Цель клиентского класса - реализовать шаблон стратегии, то есть ответственность клиента. Цель алгоритмов состоит в том, чтобы реализовать логику, за которую они несут ответственность, и принцип единой ответственности гласит: не группируйте их все вместе в системе, поскольку они будут меняться по разным причинам. Это мои $ 0,02.