Здравствуйте, kurel, Вы писали:
K>Пишете ли вы интерфейсы (в java называются интерфейсы, для других языков свои аналоги) для всех (или большинства) классов приложения?
It depends. Всё определяется используемым языком/фреймворком/архитектурой софта/реальной решаемой проблемой. Если рассматривать случай сферического коня в вакууме, то интерфейсы стоит использовать в двух случаях:
1. У вас есть слабосвязанные части приложения с жёстко определённым контрактом. Собственно, интерфейсы — и есть этот контракт.
2. Вы хотите переиспользовать логику для разнотипных объектов с частично похожим API — эдакий типизированный duck-typing. Тут интерфейсы описывают отношение "объект ведёт себя как", в отличие от наследования ("объект является чем-то"). Классика — Collection<E>/Comparable<T> в яве.
Все прочие варианты — это уже
не лечится паттернофилия