Хотя я, как правило, придерживаюсь варианта 2, я продолжу в том же духе и докажу, что вариант 1 действительно уместен в большинстве случаев, когда он применяется.
Удобство и понятность кода важны. Вопрос, который мы должны задать себе, заключается в том, будет ли разработчик, использующий или видящий ссылку на этот класс, интуитивно понимать, что класс реализует этот интерфейс (и, таким образом, по существу является подтипом).
В хорошо написанном классе в типичном случае имя класса должно показывать, что он реализует интерфейс. Добавление интерфейса будет просто избыточностью.
Однако , в случаях, когда имя класса не дает понять, какие интерфейсы он реализует, и, несмотря на запах, это так, как есть, и это имя, которое застрянет, тогда имеет смысл добавить агрегаты для явного указания интерфейса. Это также хорошо, если кто-то в будущем изменит иерархию, что возможно при неинтуитивном наследовании, подобном этому.