En la ingeniería de software , los patrones de diseño de creación son patrones de diseño que se ocupan de los mecanismos de creación de objetos , tratando de crear objetos de una manera adecuada a la situación. La forma básica de creación de objetos podría resultar en problemas de diseño o en una mayor complejidad al diseño. Los patrones de diseño de creación resuelven este problema controlando de alguna manera la creación de este objeto.
Los patrones de diseño creacional se componen de dos ideas dominantes. Uno es encapsular el conocimiento sobre las clases concretas que utiliza el sistema. Otro es ocultar cómo se crean y combinan instancias de estas clases concretas. [1]
Los patrones de diseño de creación se clasifican además en patrones de creación de objetos y patrones de creación de clases, donde los patrones de creación de objetos se ocupan de la creación de objetos y los patrones de creación de clases se ocupan de la instanciación de clases. En mayor detalle, los patrones de creación de objeto difieren parte de la creación de su objeto a otro objeto, mientras que los patrones de creación de clase difieren su creación de objeto a subclases. [2]
Cinco patrones de diseño bien conocidos que forman parte de los patrones de creación son los
- Patrón de fábrica abstracto , que proporciona una interfaz para crear objetos relacionados o dependientes sin especificar las clases concretas de los objetos. [3]
- Patrón de constructor , que separa la construcción de un objeto complejo de su representación para que el mismo proceso de construcción pueda crear diferentes representaciones.
- Patrón de método de fábrica , que permite que una clase difiera la instanciación a subclases. [4]
- Patrón de prototipo , que especifica el tipo de objeto a crear utilizando una instancia prototípica y crea nuevos objetos clonando este prototipo.
- Patrón Singleton , que garantiza que una clase solo tenga una instancia y proporciona un punto global de acceso a ella. [5]
Definición
Los patrones de creación apuntan a separar un sistema de cómo se crean, componen y representan sus objetos. Aumentan la flexibilidad del sistema en términos de qué, quién, cómo y cuándo de la creación de objetos. [6]
Uso
Como la ingeniería de software moderna depende más de la composición de objetos que de la herencia de clases, el énfasis se desplaza de los comportamientos de codificación rígida hacia la definición de un conjunto más pequeño de comportamientos básicos que se pueden componer en otros más complejos. [7] Los comportamientos de codificación rígida son inflexibles porque requieren anular o volver a implementar todo para cambiar partes del diseño. Además, la codificación no promueve la reutilización y dificulta el seguimiento de los errores. Por estas razones, los patrones de creación son más útiles que los comportamientos de codificación rígida. Los patrones de creación hacen que el diseño sea más flexible. Proporcionan diferentes formas de eliminar referencias explícitas en las clases concretas del código que necesita instanciarlas. [8] En otras palabras, crean independencia para objetos y clases.
Considere aplicar patrones de creación cuando:
- Un sistema debe ser independiente de cómo se crean sus objetos y productos.
- Un conjunto de objetos relacionados está diseñado para usarse en conjunto.
- Ocultar las implementaciones de una biblioteca de clases o producto, revelando solo sus interfaces.
- Construcción de diferentes representaciones de objetos complejos independientes.
- Una clase quiere que su subclase implemente el objeto que crea.
- Las instancias de clase se especifican en tiempo de ejecución.
- Debe haber una sola instancia y el cliente puede acceder a esta instancia en todo momento.
- La instancia debe ser extensible sin ser modificada.
Estructura
A continuación se muestra un diagrama de clases simple que la mayoría de los patrones de creación tienen en común. Tenga en cuenta que los diferentes patrones de creación requieren clases participadas adicionales y diferentes.
Participantes :
- Creador : declara la interfaz del objeto. Devuelve el objeto.
- ConcreteCreator : Implementa la interfaz del objeto.
Ejemplos de
Algunos ejemplos de patrones de diseño de creación incluyen:
- Patrón de fábrica abstracta : una clase solicita los objetos que requiere de un objeto de fábrica en lugar de crear los objetos directamente
- Patrón de método de fábrica : centraliza la creación de un objeto de un tipo específico eligiendo una de varias implementaciones
- Patrón de constructor : separe la construcción de un objeto complejo de su representación para que el mismo proceso de construcción pueda crear diferentes representaciones.
- Patrón de inyección de dependencia : una clase acepta los objetos que requiere de un inyector en lugar de crear los objetos directamente
- Patrón de inicialización perezosa : táctica de retrasar la creación de un objeto, el cálculo de un valor o algún otro proceso costoso hasta la primera vez que se necesita
- Patrón de grupo de objetos : evite la adquisición costosa y la liberación de recursos reciclando objetos que ya no están en uso
- Patrón de prototipo : se utiliza cuando el tipo de objetos a crear está determinado por una instancia prototípica, que se clona para producir nuevos objetos.
- Patrón singleton : restringe la instanciación de una clase a un objeto
Ver también
Referencias
- ^ Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995). Patrones de diseño . Massachusetts: Addison-Wesley. pag. 81 . ISBN 978-0-201-63361-0. Consultado el 22 de mayo de 2015 .
- ^ Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995). Patrones de diseño . Massachusetts: Addison-Wesley. ISBN 978-0-201-63361-0. Consultado el 22 de mayo de 2015 .
- ^ Freeman, Eric; Freeman, Elisabeth; Sierra, Kathy; Bates, Bert (2004). Hendrickson, Mike; Loukides, Mike (eds.). Patrones de diseño de Head First . California: O'Reilly Media. pag. 156. ISBN 978-0-596-00712-6. Consultado el 22 de mayo de 2015 .
- ^ Freeman, Eric; Freeman, Elisabeth; Sierra, Kathy; Bates, Bert (2004). Hendrickson, Mike; Loukides, Mike (eds.). Patrones de diseño de Head First . California: O'Reilly Media. pag. 134. ISBN 978-0-596-00712-6. Consultado el 22 de mayo de 2015 .
- ^ Freeman, Eric; Freeman, Elisabeth; Sierra, Kathy; Bates, Bert (2004). Hendrickson, Mike; Loukides, Mike (eds.). Patrones de diseño de Head First . California: O'Reilly Media. pag. 177. ISBN 978-0-596-00712-6. Consultado el 22 de mayo de 2015 .
- ^ Judith, obispo (2007). Patrones de diseño de C # 3.0 . California: O'Reilly Media. pag. 336 . ISBN 978-0-596-52773-0. Consultado el 22 de mayo de 2015 .
- ^ Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995). Patrones de diseño . Massachusetts: Addison-Wesley. pag. 84 . ISBN 978-0-201-63361-0. Consultado el 22 de mayo de 2015 .
- ^ Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995). Patrones de diseño . Massachusetts: Addison-Wesley. pag. 85 . ISBN 978-0-201-63361-0. Consultado el 22 de mayo de 2015 .