Solución genérica a un problema recurrente
Los patrones de diseños pueden estar relacionados entre sí.
Si no hay problema, no hace falta usar un patrón. Evitar inventar el problema para poder usar un patrón.
Antipatrón: un solución que parece resolver un problema, pero es todo lo contrario.
- Creacionales.
- Estructurales.
- De comportamiento.
Objetivo:
Asegurarse de que un objeto tiene uno y solo una instancia ejemplar y proveer un unico punto de acceso a dicho objeto.
Muchas veces es considerado un antipatrón.
Requisitos:
- Necesito un unico ejemplar.
- Necesito un unico punto de acceso a dicho ejemplar.
Solución:
- Un constructor privado: que no me permita crear instancias desde fuera de la clase.
- Una variable que sea estática que represente a la instancia del unico objeto.
- Un método estatico que me permita acceder a esta instancia privada.
Objetivo:
Convertir la interfaz de una clase para poder ser usada por otra que espera una interfaz diferente a la original.
Requisitos:
- Debe existir un componente que será adaptado y que posiblemente no pueda modificar.
Objetivo:
Componer objetos en jerarquías parte-todo y permitir a los clientes tratar objetos simples y compuestos de la misma forma.
Combina objetos en estructuras de arbol para representar jerarquias de parte-todo. Permite que los clientes traten de manera uniforme a los objetos individuales y a los compuestos.
Participantes:
- Component: Declara la interfaz para los objetos de la composicion, es la interfaz de acceso y manipulacion de los componentes hijo e implementa algunos comportamientos por defecto.
- Client: Manipula objetos atravez de la interfaz proporcionada por Component.
- Composite: Define el comportamiento de los componentes compuestos, almacena a los hijos e implementa las operaciones de manejo de los componentes.
- Leaf: Definen comportamientos para objetos primitivos del compuesto.
- Patrones de diseño. Gang of Four / "Libro de Gamma"
- Head first: Design Pattern.
- Applied UML & Patterns.
- https://sourcemaking.com/design_patterns
- TDD by example. Kent Beck
- Apprenticeship patterns