В общем, создание подкласса может быть длительным процессом, требующим значительных усилий и переопределением различных методов шаблонов.
Между тем, использование делегата позволяет создать простой объект, который отвечает на несколько конкретных вопросов или реагирует по-разному.
Теперь, когда вы комбинируете это с динамизмом, которого вы можете достичь, меняя делегатов на лету, это может создать очень гибкую надежную систему, способствующую большему повторному использованию кода.
Есть некоторые общие дискуссии относительно этих вещей здесь и здесь . Вы также можете найти некоторые старые вопросы SO здесь и здесь .