В книгах по объектно-ориентированному проектированию я не встречал подходящего словосочетания, которое обозначило бы данное явление. Поэтому назову его Monomorphic Interface или Single Implementation Interface — интерфейс с единственной реализацией. Разберём ситуации, в которых такое возникает, а также предпосылки и последствия.
- Интерфейс описывает общий контракт и/или содержит развесистые комментарии, а реализация пока всего одна. Всё в порядке: в интерфейсе полно пояснений, его удобно читать. Реализация компактная, целостная, не изрезанная комментариями. Позже, возможно, появятся новые реализации.
- Интерфейс — публичный, а реализация приватная. Тут тоже всё нормально: если клиенту не нужно самому создавать объекты этого типа, приватная реализация вполне имеет право на жизнь, а клиенты библиотеки имеют доступ только к интерфейсу.
- Альтернативная реализация интерфейса используется для тестирования. Тестовые классы — штука полезная, но порой можно придумать, как обобщить назначение интерфейса, создать другие реализации и увеличить шанс повторного использования классов, которые от него зависят.
- Интерфейс необходим, потому что мы же тут все серьёзные люди. В «лучших» традициях enterprise- разработки. Такой интерфейс зачастую настолько специфичен, что множество реализаций не имеет смысла и они никогда не будут существовать. Такой интерфейс не нужен.
Именование
Имя интерфейса должно отражать абстрактную идею; имена реализаций — как именно работает данный класс. Например: Appendable — CharArrayWriter, CharBuffer, FileWriter, PrintStream, StringBuffer, StringBuilder; CharSequence — CharBuffer, String, StringBuffer, StringBuilder; AsynchronousChannel — AsynchronousFileChannel, AsynchronousServerSocketChannel, AsynchronousSocketChannel; Set — ArraySet, CopyOnWriteArraySet, EnumSet, HashSet, LinkedHashSet.
Имя не должно кричать «Смотрите, это интерфейс!», как, например, IService, или «Да это ж реализация!» как ServiceImpl. Привычка заводить интерфейсы без надобности и столь бессмысленно именовать их приводит к мусору в коде, понимать и поддерживать который сложнее.
См. также
Java Interfaces/Implementation naming convention — ответ на StackOverflow