0

Пишу сюда первый раз) В ходе изучения ООП у меня появился вопрос "Когда использовать интерфейс, а когда абстрактный класс?" Сейчас изучаю паттерн стратегия и не понимаю обязательно ли я должен реализовывать интерфейс в нем. Во многих источниках приводят диаграмму как на изображении ниже. Надеюсь понятно описал свой вопрос. Заранее спасибо за ответ!

введите сюда описание изображения

Vlad
  • 31
  • 1
    С точки зрения указанного паттерна - совершенно пофигу, какую именно абстракцию вы будете использовать: интерфейс или абстрактный класс. Выбор вида сущности для абстракции - детали языка C#, а не проектирования. https://ru.stackoverflow.com/a/1360919/373567 – aepot Nov 25 '22 at 11:39
  • @aepot То есть если бы в C# было множественное наследование, то вообще говоря абстрактный класс был бы так же удобен и гибок, как и интерфейс? Какой-то всё же нетривиальный вопрос, мне кажется. Сходу тяжело сообразить. Хотя возможно ваш ответ по ссылке что-то поясняет в этом плане, я внимательно пока не читал. – CrazyElf Nov 25 '22 at 11:53

1 Answers1

1

С теоретической точки зрения, без привязки к паттерну:

Интерфейс - более универсальная штука. Если вам нужен контракт "есть такие-то методы, их можно вызывать с такими-то параметрами, чтобы получить такой-то результат" - используйте интерфейс. Один и тот же интерфейс может быть реализован в рамках совершенно разных иерархий классов, не связанных друг с другом ничем более, кроме того, что они в конце-концов реализуют нужный интерфейс в том потомке, к которому вы будете обращаться по этому интерфейсу.

А если вы используете абстрактный класс в качестве такого контракта, то любой совместимый с ним класс должен быть его прямым потомком, и это очень ограничивает возможности.

С точки зрения указанного паттерна:

Совершенно не важно, какую именно абстракцию вы будете использовать: интерфейс или абстрактный класс. Выбор вида сущности для абстракции - детали языка C#, а не проектирования.

Ещё немного теории.

CrazyElf
  • 71,194
  • Зря общим сделали, общими надо делать вики-ответы в FAQ-вопросах, которые предназначены для редактирования сообществом и были приняты автором вопроса. Здесь же больше похоже на простой ответ на частный вопрос. – aepot Nov 25 '22 at 11:56
  • @aepot Ну я фиг знает. Думал, если не только я ответ писал, а мне помогали, то надо делать общим, что-то такое ) – CrazyElf Nov 25 '22 at 11:58