Возможно, вам придется заняться другими делами, кроме стратегии ... Например, если вам нужно добавить ведение журнала или распечатать статистику о вашем списке - вы, вероятно, не захотите включать это в свою стратегию. Вы также можете динамически добавлять или разрешать пользователю выбирать стратегии, например, загружая «плагины».
Как правило, вы будете использовать стратегию для более кратковременных и изменчивых зависимостей, которые, возможно, придется изменить, где в качестве интерфейса будет использоваться большая или более статическая функциональность. Разница, например, между временем выполнения и гибкостью конфигурации.
Чтобы использовать ваш пример сортировщика списка, стратегия может взять IEnumerable и отсортировать его, но вы можете захотеть определить дополнительные функциональные возможности в приведенном выше классе ListSorter, который, наконец, использует эту стратегию, например, взяв различные входные коллекции и представив их. стратегии сортировки или их нормализации - таким образом вы отделяете свой код, так как компоненту, запрашивающему список, нужно отсортировать, не имеет значения, как компонент заканчивает его сортировку, и код сортировки не должен знать о нормализация и т. д. Конечно, это более полезно в более крупных приложениях и в сочетании с другими методами, поэтому трудно продемонстрировать на таком тривиальном примере, как этот, но, надеюсь, даст вам представление.