Busqueda local

Loading

sábado, 19 de febrero de 2011

Factory Pattern

Desde que incursione por primera vez al paradigma orientado a objetos, me llamo poderosamente la atención la conceptualización de los objetos reales, en definiciones denominadas Clases, que por medio del mecanismo de la instanciación se convierten en objetos.
Este mecanismo no se ve afectado por las diferentes clases, siempre se lleva a cabo por medio de un constructor. Los constructores pueden recibir atributos, para inicializar las propiedades de la nueva instancia, así como recientemente las modificaciones al Framework nos permiten inicializar dichas propiedades al momento de crear la instancia sin que sean enviados argumentos al constructor.
Este patrón se enfoca en este proceso, sin importar el tipo de clase que deba instanciarse. Ya que incluso este mecanismo si es usado sin medir las consecuencias a futuro, el impacto de una modificación en nuestro código, puede ser muy grave.
 

Ejemplo:

Analicemos el siguiente problema: Se requiere una aplicación que sea capaz de crear páginas web de acuerdo a su tipo; con esto podríamos delegar la carga de la información que presentara la página, a esta aplicación.
 

Analicemos brevemente:

Todas las páginas son de la misma clase, sin embargo el tipo de cada una es diferente. Esto nos dice que necesitaremos una Interface común, así como algún listado de los tipos que se podrán crear.
Lo primero es crear la interface:
factory1
Después creamos el enum de las páginas:
factory3
A partir de esta interface creamos una case abstracta:
factory2
Al crear esta clase abstracta de la cual deben heredar las clases finales, podemos implementar código que ya no será necesario escribir en cada clase final.
El método Init() no se implementa, porque según los requerimientos cada clase especifica, debe implementar acciones especificas.
En este punto debemos implementar nuestras clases para cada página específica a partir de la clase abstracta:
factory4
Por último debemos crear nuestra clase Factory, que será la encargada de instanciar los objetos según el tipo solicitado:
factory5
Y por ultimo creamos una aplicación de consola para poder realizar pruebas:
factory6
Comentarios finales
Este patrón representa una forma muy efectiva de controlar el proceso de crear instancias de una seria de clases que tiene una interface en común; permitiéndonos estar preparados para realizar cambios incluso en ese momento tan importante, que de otra forma no podría.

No hay comentarios:

Publicar un comentario