в C# в чем разница между шаблоном стратегии и делегатов?
Я рассматривал примеры реализации шаблона стратегии, и мне кажется, что они очень похожи на делегатов c#. Единственное различие, которое я вижу, заключается в том, что реализации шаблона стратегии не нужно явно объявлять делегат.
но кроме этого, они оба указывают на функции, которым нужна определенная подпись, и они могут использоваться для определения того, что выполнять во время выполнения.
есть более очевидная разница, что я не хватает?
Я думаю, вопрос будет, если они похожи, то в чем преимущество использования одного над другим?
5 ответов
проще говоря, вы можете использовать делегаты для реализации паттерна Стратегия.
шаблон стратегии-это шаблон. Делегаты-это языковая функция. Для реализации шаблона используется функция language. Они находятся в двух отдельных категориях понятий, но связаны в своем взаимодействии друг с другом.
другими словами, шаблон стратегии-это план, делегаты C# - это кирпичи. Вы не можете построить дом (шаблон стратегии) без них. (Вы также можете построить его с другими видами кирпичей, но ничто в языковой функции делегатов по своей сути не описывает шаблон стратегии).
шаблоны проектирования - это языковые агностические решения высокого уровня для часто встречающихся проблем.
делегаты могут использоваться в конкретной платформе реализация шаблона стратегии для .NET, но это не единственный способ реализации такого решения.
альтернативным решением является определение интерфейса, такого как:
public interface IStrategy
{
void DoStuff(...)
}
стратегии затем будут представлены классами, реализующими этот интерфейс, а не a делегат.
делегаты могут быть хорошей реализацией, если вы ожидаете, что ваши стратегии будут очень простыми. Для чего-либо достаточно сложного, реализация стратегий в качестве интерфейсов дает вам гораздо больше возможностей, когда дело доходит до отслеживания состояния, организации вещей в несколько методов, совместного использования кода между реализациями и т. д.
Шаблоны-это вопрос архитектуры. Делегаты - это вопрос осуществления.
в C# шаблон стратегии почти всегда будет реализован с использованием делегата.
шаблон стратегии-это шаблон проектирования, который позволяет выбирать различные функции во время выполнения, в то время как делегат-это языковая конструкция, которая позволяет создавать ссылку на функцию и использовать ее в качестве переменной.
шаблон стратегии лучше реализован с полиморфизмом, а не делегатами, поскольку полиморфная отправка имеет тенденцию быть более элегантной.