Ну, Джош Блох сказал сам в Эффективный Java 2d :
Некоторые основные моменты:
- Существующие классы могут быть легко модифицированы для реализации нового интерфейса. Все, что вам нужно сделать, это добавить необходимые методы, если они еще не существуют, и добавить объявление класса к объявлению класса.
- Интерфейсы идеально подходят для определения микшинов. Как ни странно, mixin - это тип, который класс может реализовать в дополнение к его «первичному типу», чтобы объявить, что он обеспечивает некоторое необязательное поведение. Например, Comparable является интерфейсом mixin, который позволяет классу объявлять, что его экземпляры упорядочены относительно других взаимно сопоставимых объектов.
- Интерфейсы позволяют создавать структуры неиерархического типа. Иерархии типов отлично подходят для организации некоторых вещей, но другие вещи не падают аккуратно в жесткую иерархию.
- Интерфейсы обеспечивают безопасные и мощные улучшения функций с помощью идиомы для каждого класса. Если вы используете абстрактные классы для определения типов, вы оставляете программиста, который хочет добавить функциональность без альтернативы, но использовать наследование.
Кроме того, вы можете комбинировать достоинства интерфейсов и абстрактных классов, предоставляя абстрактный класс реализации скелета, чтобы идти с каждым нетривиальным интерфейсом, который вы экспортируете.
blockquote>] С другой стороны, интерфейсы очень трудно развиваться. Если вы добавите метод в интерфейс, он сломает все его реализации.
PS: купите книгу. Это намного более подробно.
Я ничего не знаю (не то, что они не существуют, я просто не знаю о них), но, возможно, стоит обсудить альтернативную стратегию, а также плюсы и минусы.
Как правило, вы хотите хранить сериализованную версию буфера протокола, проиндексированную по какому-то определенному ключу (возможно, уникальному идентификатору). Затем вы можете построить вторичные индексы для других интересных полей, которые указывают на этот уникальный идентификатор. Идея состоит в том, что вы бы хотели, чтобы такие явные индексы масштабировались за пределы системы, предоставляющей произвольные индексы. Это, очевидно, открывает мир новых проблем (таких как устаревшие произвольные индексы).
Вот проект, который я нашел: https://github.com/google/mysql-protobuf
Это sql, который говорит на protobuf, выглядит многообещающе, но последний коммит был в середине марта 2016.
В последнее время ClickHouse добавил поддержку протобуф-сообщений.
Облачный Гаечный ключ оказал бы собственную поддержку для protobufs.