Patrón Interfaz Marcadora (I)
Segunda parte de esta entrada: Patrón Interfaz Marcadora (II)
Introducción
Uno de los patrones más desconocidos en general y no por ello infrautilizado, es el Patrón de Interfaz Marcadora o Marker Interface Pattern.
En .NET tenemos dos formas de implementar este patrón. En esta primera entrada sobre este patrón veremos una de estas formas.
¿Qué es el Patrón Interfaz Marcadora?
Lo primero de todo es entender bien qué es o en qué consiste el Patrón Interfaz Marcadora.
Se trata de un patrón de diseño que puede ser utilizado para proporcionar información marcadora sobre un objeto concreto.
El objetivo de este patrón es el de indicar el comportamiento de la clase que la implementa.
Sin embargo, debe quedar claro para evitar dudas, que una interfaz marcadora es aquella que carece de miembros, es decir, que sirve para marcar. Además de esto, al carecer de miembros, no define ningún contrato que pueda ser implementado.
Clases y subclases
Hablando de herencia, debemos tener claro un aspecto que seguramente dominaremos todos a estas alturas. Si tenemos una clase que implementa una interfaz marcadora y una subclase que hereda de esa clase, ésta también arrastrará consigo esa interfaz marcadora. Es algo obvio, pero debemos tenerlo en cuenta.
¿Cómo funciona?
Comprenderemos mejor el funcionamiento de este patrón con un ejemplo en código C#.
Para ello, crearemos inicialmente una interfaz vacía como por ejemplo:
1: public interface IMarcadoraFoo
2: {
3: } // IMarcadoraFoo
Luego, tendremos una clase que implementará esta interfaz marcadora, como por ejemplo la clase Foo:
1: public class Foo : IMarcadoraFoo
2: {
3: } // Foo
Si dispongo de un método o función que interactúe de alguna manera con una clase Foo, podré preguntarle si implementa esta interfaz marcadora.
Un ejemplo sencillo de como preguntar si una clase implementa la interfaz marcadora es hacerlo de la siguiente manera:
1: Foo foo = new Foo();
2: if (foo is IMarcadoraFoo)
3: {
4: MessageBox.Show("Es marcadora");
5: }
6: else
7: {
8: MessageBox.Show("No es marcadora");
9: }
Como podemos apreciar en el código anterior, hemos verificado que la clase Foo con la que queremos trabajar es una clase que implementa la interfaz marcadora IMarcadoraFoo.
No obstante, existe otra forma más recomendable en .NET de implementar al Patrón Interfaz Marcadora, y es hacerlo con atributos. Esto lo veremos en la próxima entrega.
Referencias
Marker Interface Pattern (Wikipedia)
Segunda parte de esta entrada: Patrón Interfaz Marcadora (II)