design patterns - lista - Patrones de diseño: Compuesto vs. Composición
patrones de diseño java (1)
Estoy terminando un curso sobre patrones de diseño y, mientras revisaba las notas, encontré algo que me perdí durante el semestre: Compuesto contra Composición . Lo que logré entender es que el compuesto es cuando un objeto en realidad encapsula objetos enteros, mientras que la composición es cuando solo contiene punteros a ellos.
- ¿Es esto correcto? ¿Puede alguien explicarme esto un poco mejor?
- ¿Cuándo preferiría uno sobre el otro?
Composition
Este es un concepto de diseño (no es realmente un patrón). Este término se utiliza cuando desea describir un objeto que contiene otro. Ocurre muy a menudo en la composición sobre la discusión de la herencia .
Además, la composición implica una fuerte propiedad. Un objeto posee (es decir, gestiona el ciclo de vida) de otro objeto. Cuando el padre es destruido, todos los niños también son destruidos. Si no existe una relación tan fuerte (los niños pueden sobrevivir a los padres) estamos hablando de agregación .
Citando un gran ejemplo en Wikipedia :
Por ejemplo, una universidad posee varios departamentos (por ejemplo, química), y cada departamento tiene una cantidad de profesores. Si la universidad cierra, los departamentos ya no existirán, pero los profesores en esos departamentos continuarán existiendo . Por lo tanto, una universidad puede verse como una composición de departamentos , mientras que los departamentos tienen una agregación de profesores . Además, un profesor puede trabajar en más de un departamento, pero un departamento no puede formar parte de más de una universidad.
Como puede ver, debe elegir entre composición o agregación según el tipo de relación de propiedad.
Patrón compuesto
Este es un patrón de diseño de GoF que describe una relación fuerte entre padres e hijos en la que el hijo puede ser un nodo simple o un contenedor de otros nodos (posiblemente conteniendo otros hijos).
Es muy común en GUI y en estructura de árbol. Por ejemplo, en Java Swing, un JPanel
puede contener varios controles como campos de texto, etiquetas, listas, etc., pero también puede contener otros JPanel
que, a su vez, pueden contener componentes simples e incluso más paneles anidados.
Normalmente, el patrón de diseño compuesto utiliza la composición, sin embargo, en algunos casos, el padre no tiene que ser propietario de todos los hijos. Para continuar con el ejemplo de la GUI, puede tomar un panel y moverlo a otro lugar (cambiar el padre).