Introducción al patrón de fábrica
Un patrón de diseño es un método para resolver problemas recurrentes en el diseño de software. El Factory Pattern es uno de los patrones de diseño que ayudan a crear objetos de forma flexible y desacoplada.
Factory Pattern es un patrón de diseño creacional en C++ que permite la creación de objetos sin conocer explícitamente la clase del objeto. Proporciona una forma de encapsular la lógica de creación de objetos complejos dentro de una clase de fábrica separada. Esto se hace definiendo una interfaz común para crear objetos, donde la clase específica del objeto se determina en tiempo de ejecución.
En lugar de crear un objeto directamente, usamos el método de fábrica para darnos una instancia del objeto que queremos. De esta manera, podemos ocultar los complicados pasos involucrados en la creación del objeto y simplificar el cambio o la modificación del objeto en el futuro.
¿Por qué usar el patrón de fábrica?
Hay varias razones por las que podríamos querer usar el patrón de fábrica. Una razón es que permite desacoplar el código de clases específicas. Al usar un método de fábrica, podemos cambiar fácilmente una clase por otra sin tener que cambiar ningún otro código y hacerlo más eficiente.
Otra razón para usar el patrón de fábrica es que puede hacer que el código sea más comprobable. Los patrones de fábrica nos permiten probar el código creando objetos simulados.
Estas son algunas de las razones por las que el patrón de fábrica se usa en C++:
- El patrón Factory Method se usa cuando una clase no sabe de antemano qué objetos necesita crear.
- El patrón se usa cuando una clase se basa en sus subclases para especificar los objetos que crea.
- Es útil cuando desea encapsular la lógica para crear un objeto complejo en un solo lugar.
Ejemplo de patrón de fábrica en C++
En C++, podemos implementar el patrón de fábrica definiendo una clase base abstracta con un método de fábrica virtual. Este método debería devolver un puntero a la instancia de clase deseada. Después de eso, podemos derivar clases concretas de esta clase base y anular el método de fábrica para devolver una instancia de la clase adecuada.
Aquí hay un ejemplo de cómo podríamos usar esta implementación del patrón de fábrica:
#incluirusando el espacio de nombres estándar ;
forma de clase {
público :
virtual vacío dibujar ( ) = 0 ;
estático Forma * crearforma ( En t tipo ) ;
} ;
círculo de clase : forma pública {
público :
vacío dibujar ( ) {
cout << 'Dibujar un círculo'. << final ;
}
} ;
rectángulo de clase : forma pública {
público :
vacío dibujar ( ) {
cout << 'Dibujar un rectángulo'. << final ;
}
} ;
Forma * Forma :: crearforma ( En t tipo ) {
si ( tipo == 1 ) {
devolver nuevo círculo ( ) ;
} demás si ( tipo == 2 ) {
devolver nuevo rectángulo ( ) ;
} demás {
devolver punto nulo ;
}
}
En t principal ( ) {
Forma * círculo = Forma :: crearforma ( 1 ) ;
círculo -> dibujar ( ) ;
Forma * rectángulo = Forma :: crearforma ( 2 ) ;
rectángulo -> dibujar ( ) ;
devolver 0 ;
}
En este ejemplo, tenemos una clase Shape con dos clases derivadas: Circle y Rectangle. La clase Shape tiene una función virtual pura draw(), que es implementada por las clases derivadas. La clase Shape también tiene una función estática createShape(int type), que actúa como un método de fábrica para crear instancias de las clases derivadas basadas en el tipo especificado. Se llama a la función dibujar() en los objetos creados para demostrar su comportamiento específico.
Conclusión
Factory Pattern es un patrón de diseño creacional en C++ que permite la creación de objetos sin conocer explícitamente la clase del objeto. Proporciona una interfaz simplificada para crear objetos ocultando la compleja lógica de creación detrás de una clase de fábrica. Esto se hace definiendo una interfaz común para crear objetos, donde la clase específica del objeto se determina en tiempo de ejecución. Lea más sobre patrones de fábrica en este artículo.