Tengo una pregunta sobre dos operaciones que comúnmente se ven en un diagrama de clase compuesto de ejemplo.
* GetDescendents
* GetChild (int)preguntas de diseño de patrón compuesto
Un ejemplo común es la de archivos y directorios, me quedo con eso. Digamos que la operación de interés es Tamaño, por lo que el archivo tiene un tamaño real y el Directorio tiene un Tamaño derivado de la iteración recursiva de GetDescendents. Hasta aquí todo bien. Mi pregunta tiene que ver con el uso del cliente de GetDescendents. Digamos que necesita los archivos en un directorio que son imágenes para alguna operación dada. En la práctica, se usa una combinación de GetDescendents y Children para devolver los archivos de imagen (dependiendo de si el cliente quería todos los archivos de imágenes anidados o simplemente en el nivel raíz).
Así que la pregunta número uno es, ¿no es probable que tenga un método GetImageFiles en el compuesto en lugar de hacer que el cliente lo resuelva? Y suponiendo que sea así, ¿es GetDescendents práctico para exponer a las llamadas de los clientes (como el ImageViewer) fuera de la composición?
La segunda pregunta sobre GetChild (int); ¿Es el int índice de posición ordinal para devolver un solo hijo? Un nivel de profundidad en GetDescendents? ¿Cuál sería un ejemplo de cómo un cliente usaría ese método?
Saludos,
Berryl
Exactamente. Mi pregunta es si * siempre * tiene sentido exponer las operaciones de los niños a clientes que no forman parte de la composición, o al menos tienen una relación muy íntima con ella, es decir, son operaciones internas para producir una operación de consumo de cliente como GetFilesOfType.(). – Berryl
@Berryl: depende de lo que represente su clase. El "patrón" es solo un detalle de implementación, lo importante es el "concepto". –