Tengo una situación en la que tengo una interfaz que define cómo se comporta determinada clase para completar un determinado rol en mi programa, pero en este punto vez no estoy 100% seguro de cuántas clases escribiré para desempeñar ese papel. Sin embargo, al mismo tiempo, sé que quiero que el usuario pueda seleccionar, desde un cuadro de lista/combo de GUI, qué clase concreta implementa la interfaz que quiere usar para completar un determinado rol. Quiero que la GUI pueda enumerar todas las clases disponibles, pero preferiría no tener que volver atrás y cambiar el código anterior cada vez que decida implementar una nueva clase para completar ese rol (que puede tardar meses)¿Cómo puedo hacer un seguimiento de (enumerar) todas las clases que implementan una interfaz?
algunas cosas que he considerado:
- utilizando una enumeración
- Pros:
- yo sé cómo hacerlo
- Contras
- voy a tener que actualizar actualizar la enumeración cuando agrego una nueva clase
- fea para recorrer
- Pros:
- utilizando algún tipo de
static
lista de objetos en la interfaz, y agregar un nuevo elemento desde el archivo de definición de la clase de implementación- Pros:
- no tendrá que cambiar el código antiguo
- Contras:
- Ni siquiera estoy seguro si esto es posible
- No está seguro de qué tipo de información para almacenar de manera que un método de fábrica puede elegir la constructor apropiado (tal vez un mapa entre una cadena y un puntero de función que devuelve un puntero a un objeto de la interfaz)
- Pros:
Supongo que este es un problema (o similar a un problema) que los programadores más experimentados probablemente hayan encontrado antes (y con frecuencia), y probablemente exista una solución común a este tipo de problema, que es casi seguro que es mejor que cualquier cosa con la que sea capaz de llegar. Entonces, ¿cómo lo hago?
(PS he buscado, pero todo lo que encontré fue esto, y no es la misma:. How do I enumerate all items that implement a generic interface? Parece que ya sabe cómo resolver el problema que estoy tratando de averiguar.)
Edit: renombró el título a "¿Cómo puedo hacer un seguimiento de ..." en lugar de solo "¿Cómo puedo enumerar ...?" porque la pregunta original sonaba como si estuviera más interesado en examinar el entorno de tiempo de ejecución, donde lo que soy realmente interesado en la conservación de libros en tiempo de compilación.
¿Qué quiere decir con interfaz? ¿Una clase de interfaz real o un método específico para la clase? – TimW
Una clase de interfaz real: una colección de varios métodos que definen interacciones con un objeto de esa interfaz – cheshirekow