PATRÓN FACTORY METHOD/MÉTODO FÁBRICA
¿CUAL ES EL PROPÓSITO?
Permitir que una clase delegue la responsabilidad de la creación de objetos a sus subclases.
¿QUÉ MOTIVA A IMPLEMENTAR ESTE PATRÓN?
En el desarrollo de aplicaciones es común encontrarse con la creación de objetos que, aunque bien son diferentes, tienen algo en común, pertenecen a una misma familia por decirlo de alguna manera, un ejemplo de esto es la creación de documentos.
Una clase Gaveta que hace parte de una clase Archivo, cuya responsabilidad es almacenar los documentos en una aplicación, necesitará crear instancias de algún tipo de documento especifico. Por ejemplo, se pueden crear documentos en Word, Hojas de calculo, PDF, etc vease la figura 1.
Debido a que las subclases Documentos concretas para instanciar son especificas de su aplicación, la clase Gaveta no puede predecir qué subclase de Documento debe instanciar, es decir, la clase Gaveta solo sabe cuándo debe crearse un nuevo Documento, pero no qué tipo de Documento crear.
figura 1.
Las subclases de Archivo re definen su operación abstracta crearDocumento para que devuelva la subclase de Documento adecuada. llamaremos a este método crearDocumento un método de fabricación porque es el responsable de "fabricar" un objeto.
IMPLEMENTACIÓN
A la hora de aplicar debemos tener en cuenta dos cuestiones:- pueden usarse métodos de fabricación parametrizados. es una variante de este patrón que permite que los métodos en los que se implementa la fabricación creen varios tipos de productos, en nuestro caso de Documento.
- cuando la clase creador, Gaveta para nuestro caso, es una clase concreta, es decir que no tiene subclases, y proporciona una implementación predeterminada del método de fabricación. Para ser mas claros, es crear solo una clase Gaveta y que ella misma sea quien se encargue de crear los tipos de documentos según la lógica implementada por defecto en el método de fabricación, crearDocumento para nuestro caso.
- otra variante es cuando la clase creador, Gaveta para nuestro caso, es una clase abstracta y no proporciona una implementación para el método de fabricación que declara.
para ilustrar mejor estas tres variantes especifiquemos el problema de las gavetas del archivo. Suponga que la clase Gaveta puede crear cualquier tipo de documento, por lo que para resolver este problema usando el método de fabricación, se hará uso de la primera variante descrita anteriormente, en donde se puede crear un método de fabricación parametrizado que reciba la extensión del documento y cree, ya sea, un Documento pdf si es .pdf, o Word si es .Doc, etc. vease la figura 1.1
figura 1.1
figura 1.2
La primera y segunda variante son muy parecidas, por lo que solo se desarrollará el código de la ultima. Por otra parte, a modo de aprendizaje se dejará la implementación de la primera variante como ejercicio, será fácil, solo se debe desarrollar en la lógica del método fábrica devolver una instancia según la extensión recibida.
Ahora si, vamos al código. Empezamos creando la clase abstracta Gaveta.
Luego creamos las subclases GavetaDigitalizados y GavetaOficios, respectivamente.Ahora si, vamos al código. Empezamos creando la clase abstracta Gaveta.
Ahora Crearemos la Interfaz Documento y los tipos de documento Word y Pdf respectivamente.
Por ultimo creamos la clase Archive que tendrá un listado de gavetas creadas por defecto.
El siguiente código, es la implementación en main.
0 comentarios:
Publicar un comentario