Beruflich Dokumente
Kultur Dokumente
Define una interfaz para crear un objeto, pero deja que sean las subclases
quienes decidan qu clase instanciar. Permite que una clase delegue en sus
subclases la creacin de objetos.
El patrn de diseo Factory Method consiste en definir una interfaz para
crear objetos de tipo genrico permitiendo a las subclases decidir qu tipo
de objetos concreto crear.
Caractersticas:
Clasificacin: creacional
Ventajas:
El patrn Factory Method permite escribir aplicaciones que son
ms flexibles respecto de los tipos a utilizar, difiriendo la creacin
de las instancias en el sistema a subclases que pueden ser
extendidas a medida que evoluciona el sistema.
Ejemplo:
En el API de Java podemos encontrar un ejemplo del uso de este patrn en
la clase abstracta java.util.Calendar.
La clase Calendar es una clase abstracta base para convertir entre un objeto
de tipo Date (java.util.Date) y un conjunto de campos enteros como YEAR
(ao), MONTH (mes), DAY (da), HOUR (hora), etc.
Una subclase de Calendar representa una fecha de acuerdo a las reglas de
un calendario especfico. La plataforma provee una subclase concreta de
Calendar: GregorianCalendar. Futuras subclases podran representar
varios tipos de calendarios lunares usados en diferentes lugares del mundo.
Esto puede parecer un tanto abstracto pero se deben evitar confusiones. La
clase Calendar tiene mucho del comportamiento que esperaramos de la
clase java.util.Date, es decir, cuando obtenemos una instancia de la clase
Calendar obtenemos un instante de tiempo especfico con gran precisin
similar a lo que obtenemos con la clase date.
Se puede decir aqu que los milisegundos juegan un papel fundamental en
esta clase; pero el verdadero sentido de la clase Calendar no es obtener un
instante de tiempo sino extraerle datos.
Recordemos que la clase java.util.Date tiene mtodos que permiten
obtener el ao, mes y da, pero estos mtodos estn obsoletos
precisamente porque para eso existe Calendar y de hecho cuando usamos
el mtodo getYear() de la clase java.util.Date esta recurre a las
funcionalidades que posee la clase Calendar.
Hay que mencionar tambin que obtener un instante de tiempo especfico y
diferente del actual es supremamente sencillo con esta clase, indicndole
simplemente el da, mes y ao con que se desea trabajar, o se puede
especificar an ms dando hora, minuto y segundo deseado. Veamos:
El mtodo getInstance() de la clase es el que utiliza el patrn de diseo
Factory Method, ya
nos devuelve una subclase de Calendar, ya
especificada, con el tiempo ajustado a la hora actual. En el ejemplo, usamos
el mtodo set(args) para forzarlo a tomar la fecha deseada:
Calendar CalActual = Calendar.getInstance();
System.out.println(CalActual.getClass());
CalActual.set(2004,1,7);
System.out.println(CalActual.getTime());
CalActual.set(2004,1,7,7,0,0);
System.out.println(CalActual.getTime());