stringtranslate.com

Patrón de interfaz de marcador

El patrón de interfaz de marcador es un patrón de diseño en informática , utilizado con lenguajes que proporcionan información de tipo de tiempo de ejecución sobre objetos. Proporciona un medio para asociar metadatos con una clase donde el lenguaje no tiene soporte explícito para dichos metadatos.

Para usar este patrón, una clase implementa una interfaz de marcador [1] (también llamada interfaz de etiquetado ) que es una interfaz vacía, [2] y los métodos que interactúan con instancias de esa clase prueban la existencia de la interfaz. Mientras que una interfaz típica especifica la funcionalidad (en forma de declaraciones de métodos) que una clase de implementación debe soportar, una interfaz de marcador no necesita hacerlo. La mera presencia de dicha interfaz indica un comportamiento específico por parte de la clase implementadora. Las interfaces híbridas, que actúan como marcadores y especifican los métodos requeridos, son posibles, pero pueden resultar confusas si se usan incorrectamente.

Ejemplo

Un ejemplo de la aplicación de interfaces de marcadores del lenguaje de programación Java es la Serializableinterfaz:

paquete java.io ; interfaz pública serializable { }   

Una clase implementa esta interfaz para indicar que sus miembros de datos no transitorios se pueden escribir en un archivo ObjectOutputStream. El ObjectOutputStreammétodo privado writeObject0(Object,boolean)contiene una serie de instanceofpruebas para determinar la capacidad de escritura, una de las cuales busca la Serializableinterfaz. Si alguna de estas pruebas falla, el método arroja un archivo NotSerializableException.

Crítica

Un problema importante con las interfaces de marcador es que una interfaz define un contrato para implementar clases, y ese contrato lo heredan todas las subclases. Esto significa que no se puede "desimplementar" un marcador. En el ejemplo dado, si crea una subclase que no desea serializar (quizás porque depende del estado transitorio), debe recurrir a lanzar explícitamente NotSerializableException(según ObjectOutputStreamlos documentos)

Otra solución es que el lenguaje admita metadatos directamente:

Ver también

Referencias

  1. ^ Bloch, Josué (2008). "Artículo 37: Utilice interfaces de marcador para definir tipos" . Java efectivo (Segunda ed.). Addison-Wesley. pag. 179.ISBN 978-0-321-35668-0.
  2. ^ "Interfaz de marcador en Java". Geeks para Geeks . 2017-03-06 . Consultado el 1 de mayo de 2022 .

Otras lecturas

Java efectivo [1] por Joshua Bloch .

  1. ^ Bloch, Josué (2018). Java efectivo (Tercera ed.). Bostón. ISBN 978-0-13-468599-1. OCLC  1018432176.{{cite book}}: Mantenimiento CS1: falta el editor de la ubicación ( enlace )