Jump to content

Шаблон интерфейса маркера

(Перенаправлено из интерфейса маркера )

Шаблон интерфейса маркера — это шаблон проектирования в информатике , используемый с языками, которые предоставляют информацию о типах объектов во время выполнения. Он предоставляет средства для связи метаданных с классом, если язык не имеет явной поддержки таких метаданных.

Чтобы использовать этот шаблон, класс реализует интерфейс маркера. [ 1 ] (также называемый интерфейсом тегов ), который представляет собой пустой интерфейс, [ 2 ] и методы, которые взаимодействуют с экземплярами этого класса, проверяют существование интерфейса. В то время как типичный интерфейс определяет функциональность (в форме объявлений методов), которую должен поддерживать реализующий класс, интерфейс маркера не обязан этого делать. Само наличие такого интерфейса указывает на специфическое поведение со стороны реализующего класса. Гибридные интерфейсы, которые действуют как маркеры и определяют требуемые методы, возможны, но могут оказаться запутанными при неправильном использовании.

Примером применения маркерных интерфейсов из языка программирования Java является Serializable интерфейс:

package java.io;

public interface Serializable {
}

Класс реализует этот интерфейс, чтобы указать, что его непереходные элементы данных могут быть записаны в ObjectOutputStream. ObjectOutputStream частный метод writeObject0(Object,boolean) содержит ряд instanceof тесты для определения записываемости, один из которых ищет Serializable интерфейс. Если какой-либо из этих тестов не пройден, метод выдает ошибку NotSerializableException.

Основная проблема с интерфейсами маркеров заключается в том, что интерфейс определяет контракт для реализации классов, и этот контракт наследуется всеми подклассами. Это означает, что вы не можете «нереализовать» маркер. В приведенном примере, если вы создаете подкласс, который не хотите сериализовать (возможно, потому, что он зависит от переходного состояния), вы должны прибегнуть к явному выбрасыванию NotSerializableException (за ObjectOutputStream документы)

Другое решение состоит в том, чтобы язык напрямую поддерживал метаданные :

  • И .NET Framework , и Java (начиная с Java 5 (1.5)) обеспечивают поддержку таких метаданных. В .NET они называются «пользовательскими атрибутами» , в Java — « аннотациями » . Несмотря на разное название, концептуально это одно и то же. Они могут быть определены в классах, переменных-членах, методах и параметрах метода, и к ним можно получить доступ с помощью отражения .
  • В Python термин «интерфейс маркера» распространен в Zope и Plone . Интерфейсы объявляются как метаданные, и подклассы могут использовать implementsOnly заявить, что они не реализуют все из своих суперклассов.

См. также

[ редактировать ]
  1. ^ Блох, Джошуа (2008). «Пункт 37. Используйте интерфейсы маркеров для определения типов» . Эффективная Java (Второе изд.). Аддисон-Уэсли. п. 179 . ISBN  978-0-321-35668-0 .
  2. ^ «Интерфейс маркера на Java» . Гики для Гиков . 06.03.2017 . Проверено 1 мая 2022 г.

Дальнейшее чтение

[ редактировать ]

Эффективная Java [ 1 ] Джошуа Блох .

  1. ^ Блох, Джошуа (2018). Эффективная Java (Третье изд.). Бостон. ISBN  978-0-13-468599-1 . OCLC   1018432176 . {{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 84d1fccb88433b612267576200391faf__1690615500
URL1:https://arc.ask3.ru/arc/aa/84/af/84d1fccb88433b612267576200391faf.html
Заголовок, (Title) документа по адресу, URL1:
Marker interface pattern - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)