Если вы разрабатываете продукт и знаете, что продукт будет взаимодействовать с типом устройства, услуги и т. Д., Но не обязательно с каким, вы можете использовать интерфейс для продвижения вперед в общей архитектуре, ПРЕДОСТАВЛЯЯ, что вы знаете достаточно о тех типах устройств, чтобы написать интерфейс, который может быть успешно использован любым данным устройством этого типа. Конечно, если вы находитесь на этапе проектирования, вам лучше иметь эти знания. Весьма распространено делать проекты высокого уровня, используя только объявления интерфейса. Я не говорю, хорошо это или плохо, но, похоже, это довольно распространенная практика для тех, кто использует программное обеспечение (например, Rose и т. Д.) Для создания скелета из UML.
В другой раз вы бы точно знали, какое устройство вы собираетесь использовать, но думаете, что в будущем вам может понадобиться работать с разными или несколькими типами этого устройства.
Третье использование интерфейсов - сокращение дублирующегося кода. Это, пожалуй, единственное место, где люди увлекаются использованием интерфейса, и если бы это было не так, я бы сказал, не спрашивайте "Должен ли это быть интерфейс?" но «Может ли это быть интерфейсом?».