Sie sind auf Seite 1von 5

Factory Method:

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.

Product: define la interfaz de los objetos que crea el Factory Method.


ConcreteProduct implementa la interfaz Product.
Factory declara el mtodo FactoryMethod, que retorna el objeto
Product.
ConcreteCreator sobrescribe el mtodo generado para crear objetos
de tipo ConcreteProduct.

Caractersticas:

Clasificacin: creacional

Se lo conoce Virtual Constructor.

Hace que un diseo sea ms personalizable y slo un poco ms


complicado. El Factory Method slo requiere una nueva operacin.

Es similar a la Abstract Factory, pero sin el nfasis en las familias.

Es de rutina, especificados por un marco arquitectnico, y luego


implementar por parte del usuario la estructura.

A este mtodo se lo utiliza con el mtodo plantilla.

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.

Permite tambin encapsular el conocimiento referente a la


creacin de objetos. Factory Method hace tambin que el diseo
sea ms adaptable a cambio de slo un poco ms de complejidad.
Desventaja:

Se obliga al cliente a definir subclases de la clase Creador slo para


crear un producto concreto y esto puede no ser apropiado siempre.

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());

La primera lnea devuelve una instancia de GregorianCalendar, es aqu


donde es ms clara la utilizacin del patrn, pues esta clase ya est
previamente creada en la familia de subclases que Calendar posee, y las
cuales se pueden comportar de manera diferente.
Esta primera lnea devuelve un calendario con la fecha y hora actual, y el
mtodo getTime() retorna un objeto de tipo java.util.Date que se muestra
en consola posteriormente.
En la tercera lnea se usa el mtodo set para ajustar la fecha al "7 de enero
de 2004" y en la quinta ponemos la misma fecha pero esta vez ajustando
tambin la hora, minutos y segundos, es decir: "7 de la noche del 7 de
enero de 2004".
La salida en consola ser (note que tiene el formato de java.util.Date):
Sat Feb 07 19:55:47 GMT-05:00 2004
Sat Feb 07 07:00:00 GMT-05:00 2004

En la siguiente imagen podemos ver un ejemplo de la clase


java.util.Calendar y sus distintas instancias, evidenciando el uso del
patrn Factory Method:

Un ejemplo en la vida real podra ser el caso de un hotel:


Cuando llegamos al hotel primeramente debemos registrarnos. La
persona encargada de la recepcin nos otorga una llave de nuestra
habitacin, luego de haber pagado por ella. Esta forma puede verse como
una Fabrica de Habitaciones. Adems, mientras nos quedamos en el
hotel, si queremos hacer una llamada, necesitaremos llamar a recepcin, y
la persona encargada nos conectar con el nmero que necesitemos. Esta
forma puede percibirse como una Fabrica de Llamadas, porque la
persona en recepcin controla el acceso a las llamadas tambin.

Das könnte Ihnen auch gefallen