При программировании на Java всегда рекомендуется программировать на интерфейс, а не на реализацию. Интерфейсы - это программные конструкции, которые позволяют нам скрыть от клиентов реальные детали реализации наших методов и классов. Чтобы обезопасить код от промахов и неправильных манипуляций, а также для обеспечения гибкости, мы всегда должны стремиться раскрывать нашу функциональность через интерфейсы.

Интерфейсы также являются отличным инструментом объектно-ориентированного дизайна. Мы знаем, что в java мы можем наследовать от одного класса, но нам разрешено реализовывать столько интерфейсов, сколько мы хотим. Таким образом мы можем сделать интерфейсы краткими и значимыми, в то же время постепенно заставляя классы выполнять соответствующее поведение, для которого они предназначены. Использование интерфейсов, которые имеют всего несколько методов, предпочтительнее с точки зрения OOD, потому что они соблюдают важный принцип, называемый принципом разделения интерфейсов (см. Принципы S.O.L.I.D).

Это неприятное чувство, когда вам нужно реализовать интерфейс, который заставляет вас реализовывать методы, которые вам на самом деле не нужны. Соблюдение принципа разделения интерфейсов поможет вам создать код, который можно использовать повторно и поддерживать!

Итак, если размер используемых нами интерфейсов оказывает такое прямое влияние на возможность повторного использования и сопровождение нашего кода, могли бы мы иметь интерфейсы, у которых вообще нет методов?

Ответ: Да! Эти интерфейсы называются интерфейсами маркеров. Необычно видеть, как программисты используют их, но они существуют и могут быть действительно полезными. Вероятно, одними из самых популярных интерфейсов маркеров в Java API являются Сериализуемый, Клонируемый и Удаленный. Убедитесь в этом сами, зайдите в Документацию по Java API и найдите любой из них, и вы прочитаете что-то вроде этого:

Интерфейс сериализации не имеет методов или полей и служит только для определения семантики сериализации.

Теперь, когда мы поняли, в чем заключается идея интерфейсов маркеров, давайте рассмотрим простой пример, который проиллюстрирует, как они могут помочь нам в маркировке без добавления какого-либо дополнительного поведения.

Представьте, что компания по разведке полезных ископаемых использует программное обеспечение для ускорения обнаружения определенных материалов, которые они ищут. В частности, их интересуют определенные виды горных пород и металлов. Они называют металлы и камни «объектами исследования», поскольку они являются основными категориями материалов, которые им нужны. Кроме того, иногда во время своей деятельности они находят много других материалов, которые, как они знают, также имеют ценность на рынке, но их предприятия не имеют возможности их переработать. Они не хотят отказываться от них, потому что знают, что все еще могут получать от них некоторую маржинальную прибыль, поэтому они отправляют их в специализированную ассоциированную компанию, которая их купит. Они называют эту другую категорию материалов «Товарным товаром».

Они создали программу сортировки на ранней стадии, которую они называют «Обозреватель материалов», которая предназначена для выполнения первоначальной оценки «Explorabables» и пересылки их в соответствующие отделы для дальнейшего оценка и обработка. Прежде чем мы перейдем к программе, давайте взглянем на различные материалы, которые поддерживает их система.

Рок и металл - это «объекты исследования», они реализуют интерфейс Explorable.java и должны выполнять условия контракта.

Поскольку они не заинтересованы в обработке серебра, но знают, что оно «товарное», когда они его находят, они используют интерфейс маркера, чтобы убедиться, что программное обеспечение знает, как пересылать серебро их партнерам.

Интерфейс маркера помогает MarketExplorer обнаруживать все те материалы, которые могут быть переданы внешнему партнеру / дистрибьютору, и таким образом позволяет компании зарабатывать дополнительные деньги, не обрабатывая их самостоятельно.

Как мы видели, интерфейсы маркеров - интересная концепция, но она не используется широко, что может обеспечить некоторую дополнительную гибкость в определенных случаях. Мне было бы очень любопытно узнать, использовали ли вы их когда-нибудь и помогали ли они вам когда-нибудь в решении бизнес-задач. Пожалуйста, поделись своими мыслями.

Если вам понравилась эта история, дайте нам, а также подписывайтесь на нас.