Ante la creación de objetos de las subclases, es muy común que nuestro código se vea así:Y si tuvieramos que agregar nuevos subtipos de auto, ó eliminar otros?? --> Mayor mantenimiento y código propenso a errores !!
Identificar los aspectos que varían y separarlos de nuestro código...
Esto nos lleva a crear una nueva clase que llamaremos FabricaAutos que tendrá un método CrearAuto(int tipo) :
Con este desarrollo llegamos a un tipo de fábrica que llamaremos "Fábrica simple (simple factory), que si bien no es un patrón de diseño GoF, es una buena técnica creacional de objetos que nos acerca al siguiente patrón : Factory method
Nuestro modelo se complica...Nuestro cliente de venta de autos (AutoShop) decide expander sus horizontes comerciales fuera de Argentina, específicamente a nuestro hermano pais de Brasil. Resulta que allí los tipos de modelos de auto difieren de los de nuestro pais; por ejemplo supongamos que los autos Rural poseen sólo 2 puertas en Brasil y 4 en Argentina, y las camionetas son doble cabina en Brasil y en Argentina no, etc, etc.
Veamos algunos cambios en nuestro código, comencemos con nuestra clase AutoShop, que ahora será abstracta:
(* protected abstract Auto CrearAuto(...))
Nuestro diagrama de clases con los AutoShops de cada pais:
Como usamos este código para entregar un Auto Sedan de nuestro AutoShop de Argentina?Simple factory decide e instancia, no tiene ninguna idea sobre que hacer con el objeto creado.
2 comentarios:
Muy bueno y aclaratorio. Gracias, un saludo.
Te hago una consulta.
Por ejemplo si la clase camioneta tuviese un atributo "tracción" para especificar si es 4x2 o 4x4, al declarar la variable de tipo auto, por mas que después el constructor devuelva un new camioneta()al asignarle un valor a este atributo el compilador va a devolver un error del estilo "Auto no tiene una definición para traccion". ¿Esto se contempla en este patrón o estoy buscando por el lado equivocado? Quedo a la espera de tus comentarios. Saludos
Publicar un comentario