comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Factory Method Java

  • 2 Respuestas
  • 2499 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado LKI

  • *
  • Underc0der
  • Mensajes: 61
  • Actividad:
    0%
  • Reputación 0
  • |Un día sin aprender nada, es un día perdido..|
    • Ver Perfil
    • Email
« en: Octubre 21, 2014, 02:14:34 am »
Buenas gente, en este nuevo tutorial tratare de implementar y explicar lo que se conoce como "Factory Method". Veamos que dice la WIKIPEDIA:
Citar
El patrón de diseño Factory Method consiste en utilizar una clase constructora  dedicado a la construcción de objetos de un subtipo de un tipo determinado. Es una simplificación del Abstract Factory, en la que la clase abstracta tiene métodos concretos que usan algunos de los abstractos; según usemos una u otra hija de esta clase abstracta, tendremos uno u otro comportamiento.


Beneficios:
  • Evitamos hardcodear métodos y objetos.
  • Permite desacoplar la implementación de los métodos
  • Abstracción y legibilidad de código
  • Permite la reutilización de código
Manos a la obra..
  • Empezaremos creando un conjunto de clases modelos-bases para poder implementar y explicar nuestro ejemplo:
Código: Java
  1.  
  2.  
  3.  
  4. public class Telefono {
  5.  
  6.         //ATRIBUTOS Y METODOS...
  7.        
  8.         public Telefono() {
  9.                 // MÁS CODIGO POR ACA
  10.         }
  11.  
  12. }
  13.  
  14.  
  15. public class Paloma extends Ave{
  16.  
  17.         //ATRIBUTOS Y METODOS...
  18.        
  19.         public Paloma() {
  20.                 // MÁS CODIGO POR ACA
  21.         }
  22.  
  23. }
  24.  
  25.  
  26.  
  27. public class Reliquia {
  28.        
  29.         //ATRIBUTOS Y METODOS...
  30.        
  31.         public Reliquia() {
  32.                
  33.                 // MÁS CODIGO POR ACA
  34.         }
  35.  
  36. }
  37.  
  38.  
  • Creamos una interface "Comunicador"
Código: Java
  1. public interface Comunicador {
  2.  
  3.         public void enviarMensaje(No tienes permisos para ver links. Registrate o Entra con tu cuenta mensaje);
  4. }
  5.  

  • Por ultimo, las clases TelefonoCelular, PalomaMensajera y Telegrafo, cada una hereda de una clase base diferente, pero todas implementan la interface "Comunicador". Por lo tanto heredan y deben sobrescribir el método enviarMensaje();
Código: Java
  1. public class TelefonoCelular extends Telefono implements Comunicador {
  2.  
  3.         @Override
  4.         public void enviarMensaje(No tienes permisos para ver links. Registrate o Entra con tu cuenta mensaje) {
  5.  
  6.                 //Hacer lo que corresponda aqui
  7.                
  8.         }
  9.  
  10. }
  11.  
  12.  
  13.  
  14. public class PalomaMensajera extends Paloma implements Comunicador{
  15.  
  16.         @Override
  17.         public void enviarMensaje(No tienes permisos para ver links. Registrate o Entra con tu cuenta mensaje) {
  18.  
  19.                 //Hacer lo que corresponda aqui
  20.                
  21.         }
  22.  
  23. }
  24.  
  25. public class Telegrafo extends Reliquia implements Comunicador {
  26.  
  27.         @Override
  28.         public void enviarMensaje(No tienes permisos para ver links. Registrate o Entra con tu cuenta mensaje) {
  29.                
  30.                 //Hacer lo que corresponda aqui
  31.                
  32.         }
  33.  
  34.        
  35. }
  36.  
  37.  
  • Luego podriamos hacer algo como lo siguiente:
Código: Java
  1.  
  2. Comunicador c1 = new TelefonoCelular();
  3. Comunicador c2 = new PalomaMensajera();
  4. Comunicador c3 = new Telegrafo();
  5.  
  6. //E invocar unicamente al metodo enviarMensaje()
  7.  

Pero la verdadera importancia de todo esto la veremos a continuación:
  • Desacoplamiento de clases:

 Supongamos que tenemos una clase utilitaria llamada ComunicadorManager con un metodo estatico crearComunicador:
 
Código: Java
  1. public class ComunicadorManager{
  2.  
  3. public static Comunicador crearComunicador{
  4.  
  5.      
  6.       //retornamos cualquier objeto que necesitemos sin afectar en lo mas mínimo al programa ejemplo:
  7.       //return new TelefonoCelular();
  8.      //return new Telegrafo();
  9.  
  10.    return new PalomaMensajera();
  11.    }
  12. }
  13.  
  14.  
  15.  

  Y utilizando esta clase podriamos escribir un programa como el que sigue:

Código: Java
  1.  
  2. public class MiAplicacionDeMensajes {
  3.  
  4.         public static void main(No tienes permisos para ver links. Registrate o Entra con tu cuenta[] args) {
  5.  
  6.  
  7.                 Comunicador c = ComunicadorManager.crearComunicador();
  8.                 c.enviarMensaje("Hola, esto es solo un ejemplo!!");
  9.  
  10.         }
  11.  
  12. }
  13.  
  14.  

En este programa utilizamos la clase ComunicadorManager para obtener "un comunicador" a través del cual enviar nuestro mensaje. Lo interesate de esto es que en el método main no hardcodeamos ninguna de las clases que implementan el la interface Comunicador. Simplemente creamos un objeto comunicador utilizando el método crearComunicador y le invocamos su método enviarMensaje.

  Conclusión:

  • El metodo crearComunicador de la clase ComunicadorManager  nos permitio obtener una instancia de Comunicador sin tener que hardcodear un tipo de comunicador en particular.
  • Gracias a este método nuestro programa (el método main) quedo totalmente desacoplado de la implementación concreta del comunicador y, como vimos más arriba, cualquier objeto que se cree por mas distinto que sea no afecta ni perjudica en lo más mínimo al programa, ya que este esta totalmente separado(desacoplado) de dicha implementación.
  • Decimos entonces que utilizamos  el método crearComunicador para "fabricar objetos comunicadores". Este método constituye una factoría de objetos. A los métodos que realizan este tipo de tareas se los denomina factory.

Fuente: Java a Fondo
por: Ing Pablo Augusto SZnajdleder


Ser mejor cada día es mi meta

 =LKI=

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5380
  • Actividad:
    75%
  • Reputación 31
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #1 en: Octubre 21, 2014, 08:25:25 am »
Buenisimo bro!!
Me voy a guardar el post en favoritos!

Muchisimas gracias!!
Saludos!
ANTRAX


Desconectado Destructor.cs

  • *
  • Underc0der
  • Mensajes: 68
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #2 en: Octubre 23, 2014, 03:48:19 pm »
Para mejorarlo mas todavía, se podria trabajar con un enumerado que contenga los tipos de objetos a crear, y que se pueda utilizar para indicarle a la clase factory que objeto quieres que te devuelva

Saludos

 

¿Te gustó el post? COMPARTILO!



[Video Curso] Iniciacion a Java por DesarrolloWeb y EscuelaIT Mayo 2014

Iniciado por graphixx

Respuestas: 3
Vistas: 1591
Último mensaje Febrero 23, 2015, 10:13:28 am
por Hu3c0
[LIBRO] Programación avanzada en Java - Sonia Jaramillo Valbuena

Iniciado por graphixx

Respuestas: 3
Vistas: 3009
Último mensaje Julio 25, 2018, 10:33:06 am
por GVelandia
Como compilar programas Java en la consola de comandos de Windows

Iniciado por tar3kw0rm3d

Respuestas: 2
Vistas: 2279
Último mensaje Junio 04, 2013, 02:55:07 pm
por tar3kw0rm3d
Java Extremo [Video Cursos Completos] [Español] [ISO] 2009

Iniciado por graphixx

Respuestas: 9
Vistas: 4588
Último mensaje Diciembre 04, 2017, 02:36:34 am
por graphixx
Sobreescritura y SobreCarga de Métodos en Java ( Overriding y Overloading )

Iniciado por Expermicid

Respuestas: 0
Vistas: 1259
Último mensaje Noviembre 02, 2014, 05:02:04 pm
por Expermicid