Я бы пошел вариант 2, с подвохом.Если интерфейс SubscriptionStatus
действительно очень большой, и вы знаете, что некоторые клиенты хотят реализовать только часть этого, вы можете предоставить базовый пустой суперкласс и позволить клиентам расширять его (сделайте его abstract
, чтобы заставить их)
Нечто подобное BaseSubscriptionStatus
, которое имеет пустые реализации для всех методов и позволяет пользователю переопределять те, которые он хочет.Другой вариант -
throw UnsupportedOperationException("This method is not supported by your implementation of SubscriptionStatus. Please override it");
для каждого базового метода вместо пустой реализации.
Конечно, вы можете сохранить интерфейс SubscriptionStatus
для правильного внедрения зависимостей и тестируемости, только сделайте BaseSubscriptionStatus
реализовать это.