SlideShare una empresa de Scribd logo
Factory Method 
Autentia - Buen Diseño
Intención 
“Define an interface for creating an object, but 
let subclasses decide which class to instantiate. 
Factory Method let a class defer instantiation to 
subclasses.” 
Gamma et. al
Diagrama de Clases clásico
¿Cuándo usarlo? 
● Abstraer a la clase cliente sobre qué clase concreta de 
una familia tiene que usar. 
● Delegar la decisión de qué clases se van a instanciar 
en las clases hijas. 
● Desacoplar la complejidad de la instanciación. 
● Como alternativa a los constructores (Static FM). 
● Para hacer más extensible la arquitectura.
Pero no debemos usarlo siempre 
Como todos los patrones: no se debe forzar su uso si no es 
necesario. 
● Necesitamos una familia de objetos sobre los que 
trabajar 
● Puede aumentar la complejidad de la aplicación 
introduciendo más niveles de indirección. 
● No caer en la tentación de aplicarlo por si en el futuro 
es necesario.
Tipos de Implementación 
En general hay 4 tipos de implementación 
1. Factoría padre abstracta que delega siempre en las 
Factorías hijas. 
2. Factoría padre que devuelve valor por defecto y casos 
especiales en Factorías Hijas. 
3. Factoría padre con tipo por parámetro. 
Y también: 
4. Variante: Static Factory Method.
Ejemplo 
Familia de productos “Pelota” para diferentes 
deportes. 
public abstract class Pelota { 
float diametro; 
float peso; 
String material; 
public abstract String getTipo(); 
//Getters y Setters... 
} 
public class BaloncestoPelota extends Pelota { 
public String getTipo() { 
return "pelota de Baloncesto"; 
} 
} 
public class FutbolPelota extends Pelota { 
public String getTipo() { 
return "una pelota de fútbol"; 
} 
} 
public class TenisPelota extends Pelota { 
public String getTipo() { 
return "pelota de tenis"; 
} 
} 
public class GenericaPelota extends Pelota { 
public String getTipo() { 
return "pelota genérica"; 
} 
}
Ejemplo 
Deportistas a los que asignar una pelota para 
su deporte. 
public class Deportista { 
String nombre; 
Pelota pelota; 
public Deportista(String nombre) { 
this.nombre = nombre; 
} 
public String getSaludo() { 
return "Hola, soy " + getNombre() + " y juego con una pelota de " 
+ getPelota().getTipo() + " que pesa " + getPelota().getPeso() 
+ " gramos"; 
} 
//Getters y Setters... 
}
Ejemplo 
Familia de fábricas que construyen productos 
pelota concreta en cada método (tipo 1) 
public interface FactoryPelotas { 
public Pelota create(); 
} 
public class FactoryBaloncestoPelotas implements 
FactoryPelotas { 
public Pelota create() { 
return new BaloncestoPelota(); 
} 
} 
public class FactoryFutbolPelotas implements 
FactoryPelotas { 
public Pelota create() { 
return new FutbolPelota(); 
} 
} 
public class FactoryTenisPelotas implements 
FactoryPelotas { 
public Pelota create() { 
return new TenisPelota(); 
} 
}
Ejemplo 
Main (Cliente que usa productos) 
public class main { 
public static void main(String[] args) { 
ArrayList<Deportista> deportistas = new ArrayList<Deportista>(); 
// Definición de deportistas 
Deportista baloncestoDep = new Deportista("Gasol"); 
Deportista futbolDep = new Deportista("Messi"); 
Deportista tenisDep = new Deportista("Nadal"); 
// Fábricas concretas 
baloncestoDep.setPelota(new FactoryBaloncestoPelotas().create()); 
futbolDep.setPelota(new FactoryFutbolPelotas().create()); 
tenisDep.setPelota(new FactoryTenisPelotas().create()); 
deportistas.add(baloncestoDep); 
deportistas.add(futbolDep); 
deportistas.add(tenisDep); 
for (Deportista dep : deportistas) { 
dep.getPelota().setPeso((float) Math.random() * 500); 
System.out.println( dep.getSaludo()); 
}} 
}
Factory con parámetro (tipo 3) 
public class FactoryParamPelotas { 
public static Pelota create(TipoPelota tipo) { 
Pelota salida; 
switch (tipo) { 
case BALONCESTO: 
salida = new BaloncestoPelota(); 
break; 
case TENIS: 
salida = new TenisPelota(); 
break; 
case FUTBOL: 
salida = new FutbolPelota(); 
break; 
default: 
salida = new GenericaPelota(); 
break; 
} 
return salida; 
} 
} 
…… 
baloncestoDep.setPelota( FactoryParamPelotas.create(TipoPelota.BALONCESTO)); 
baloncestoDep.setPelota( FactoryParamPelotas.create(TipoPelota.FUTBOL)); 
baloncestoDep.setPelota( FactoryParamPelotas.create(TipoPelota.TENIS));
Static Factory Method 
Método estático que sustituye al constructor 
Foo x = new Foo(); 
vs. 
Foo x = Foo.create(); 
...o usando parámetros en la superclase 
Foo x = Foo.create(tipo1); 
también mejora la legibilidad del código 
Punto punto = new Punto(x,y, sistemaMedicion); 
si lo cambiamos por 
Punto punto = Punto.createByMetros(x,y); 
Punto punto2 = Punto.createByInches(x,y);
Relación con Abstract Factory 
AF es un nivel superior de abstracción
Gracias!

Más contenido relacionado

PPTX
Búsqueda secuencial y binaria
DOCX
Abstract factory
PDF
Documentación base de datos
PPT
Descomposición modular y estilos de control
PDF
Principios diseño del software
PDF
Sistemas distribuidos
PPTX
Administración de memoria
PPTX
Bucket sort
Búsqueda secuencial y binaria
Abstract factory
Documentación base de datos
Descomposición modular y estilos de control
Principios diseño del software
Sistemas distribuidos
Administración de memoria
Bucket sort

La actualidad más candente (20)

PDF
Cuadro comparativo entre moprosoft y cmmi
PPT
Conceptos de diseño
PPTX
Arquitectura flujo de datos(filtros y tuberías)
PPTX
Bitácora de base de datos
PPTX
Estructura de Datos - Unidad 6 Metodos de busqueda
DOCX
Requisitos funcionales y no funcionales
PPTX
Planificación de sistemas de información
PDF
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
DOCX
Ordenamiento por insercion
PDF
Modelo relacional
PPTX
3.1 Representación de conocimiento mediante reglas.pptx
DOC
Actividad4_Calculo diferencialintegral[507].doc
PPT
Diseño de interfaces
PDF
Introducción a la dinámica de sistemas y el pensamiento sistémico
PDF
Gestión de riesgos de software
PPTX
Diagrama UML de Clases
PDF
Libro administracion de la funcion informatica
PDF
Analizador Léxico en C++
PDF
Búsqueda Informada y Explorada
Cuadro comparativo entre moprosoft y cmmi
Conceptos de diseño
Arquitectura flujo de datos(filtros y tuberías)
Bitácora de base de datos
Estructura de Datos - Unidad 6 Metodos de busqueda
Requisitos funcionales y no funcionales
Planificación de sistemas de información
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Ordenamiento por insercion
Modelo relacional
3.1 Representación de conocimiento mediante reglas.pptx
Actividad4_Calculo diferencialintegral[507].doc
Diseño de interfaces
Introducción a la dinámica de sistemas y el pensamiento sistémico
Gestión de riesgos de software
Diagrama UML de Clases
Libro administracion de la funcion informatica
Analizador Léxico en C++
Búsqueda Informada y Explorada
Publicidad

Destacado (20)

PPSX
Factory method
ODP
Flex observers
PDF
Design Patterns / Patrones de Diseño
PDF
Presentación open closed principle
PDF
Patrón Façade
PDF
Patrones estructurales
PDF
Patrón Decorator
PDF
Measuring code quality:WTF/min by @dgomezg
PPT
Patrones Creacionales
PDF
Patrón Observer
PPTX
Método fabrica (Method Factory)
PDF
Nativescript
PDF
Singleton
PDF
Factory Design Pattern
PDF
Patrones de creación
PDF
Patrones de diseño: Polimorfismo
PPTX
Design Pattern - Factory Method Pattern
PPTX
Factory Method Pattern
PPTX
Design pattern (Abstract Factory & Singleton)
PPSX
Presentacion Patrones Creacionales
Factory method
Flex observers
Design Patterns / Patrones de Diseño
Presentación open closed principle
Patrón Façade
Patrones estructurales
Patrón Decorator
Measuring code quality:WTF/min by @dgomezg
Patrones Creacionales
Patrón Observer
Método fabrica (Method Factory)
Nativescript
Singleton
Factory Design Pattern
Patrones de creación
Patrones de diseño: Polimorfismo
Design Pattern - Factory Method Pattern
Factory Method Pattern
Design pattern (Abstract Factory & Singleton)
Presentacion Patrones Creacionales
Publicidad

Similar a Factory method (20)

PPTX
Patrones de diseño.pptx
DOCX
Patron Metodo Fabrica
PPTX
S07_s1-Patrones-Creacionales-Factory y Builder
PPTX
S07_s1-Patrones-Creacionales, patron Factory
PPT
Abstract Factory
PPTX
Abstract Factory
PDF
Lecture 12
PDF
Introducción a los modelos C4 en el contexto de la arquitectura de Software
PPTX
Patrones de diseño
PDF
06 patrones
PDF
Patrones de diseño I
DOCX
Herencia y Polimorfismo en Java
PPTX
Patrones de diseño
DOCX
Taller patrones de diseño
DOCX
Patron Fabrica Abstracta
PPT
Transparencias_Patrones.ppt
PPT
Presentacion Patrones De Diseno GoF
PPT
Msdn Webcast InyeccióN De Dependencias Con Spring Framework
PPTX
Operadores poo
Patrones de diseño.pptx
Patron Metodo Fabrica
S07_s1-Patrones-Creacionales-Factory y Builder
S07_s1-Patrones-Creacionales, patron Factory
Abstract Factory
Abstract Factory
Lecture 12
Introducción a los modelos C4 en el contexto de la arquitectura de Software
Patrones de diseño
06 patrones
Patrones de diseño I
Herencia y Polimorfismo en Java
Patrones de diseño
Taller patrones de diseño
Patron Fabrica Abstracta
Transparencias_Patrones.ppt
Presentacion Patrones De Diseno GoF
Msdn Webcast InyeccióN De Dependencias Con Spring Framework
Operadores poo

Último (20)

PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PPTX
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
PPTX
Curso de generación de energía mediante sistemas solares
PPTX
Sesion 1 de microsoft power point - Clase 1
PPTX
El uso de las TIC en la vida cotidiana..
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
clase auditoria informatica 2025.........
PDF
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
PPTX
Presentación de Redes de Datos modelo osi
PPT
introduccion a las_web en el 2025_mejoras.ppt
PPTX
Presentación PASANTIAS AuditorioOO..pptx
DOCX
Contenido Fundamentos de comunicaciones Fibra Optica (1).docx
PDF
CyberOps Associate - Cisco Networking Academy
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
PDF
Diapositiva proyecto de vida, materia catedra
PPTX
Presentacion de Alba Curso Auditores Internos ISO 19011
PPTX
modulo seguimiento 1 para iniciantes del
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PDF
capacitación de aire acondicionado Bgh r 410
El-Gobierno-Electrónico-En-El-Estado-Bolivia
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
Curso de generación de energía mediante sistemas solares
Sesion 1 de microsoft power point - Clase 1
El uso de las TIC en la vida cotidiana..
historia_web de la creacion de un navegador_presentacion.pptx
clase auditoria informatica 2025.........
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
Presentación de Redes de Datos modelo osi
introduccion a las_web en el 2025_mejoras.ppt
Presentación PASANTIAS AuditorioOO..pptx
Contenido Fundamentos de comunicaciones Fibra Optica (1).docx
CyberOps Associate - Cisco Networking Academy
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
Diapositiva proyecto de vida, materia catedra
Presentacion de Alba Curso Auditores Internos ISO 19011
modulo seguimiento 1 para iniciantes del
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
capacitación de aire acondicionado Bgh r 410

Factory method

  • 1. Factory Method Autentia - Buen Diseño
  • 2. Intención “Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method let a class defer instantiation to subclasses.” Gamma et. al
  • 4. ¿Cuándo usarlo? ● Abstraer a la clase cliente sobre qué clase concreta de una familia tiene que usar. ● Delegar la decisión de qué clases se van a instanciar en las clases hijas. ● Desacoplar la complejidad de la instanciación. ● Como alternativa a los constructores (Static FM). ● Para hacer más extensible la arquitectura.
  • 5. Pero no debemos usarlo siempre Como todos los patrones: no se debe forzar su uso si no es necesario. ● Necesitamos una familia de objetos sobre los que trabajar ● Puede aumentar la complejidad de la aplicación introduciendo más niveles de indirección. ● No caer en la tentación de aplicarlo por si en el futuro es necesario.
  • 6. Tipos de Implementación En general hay 4 tipos de implementación 1. Factoría padre abstracta que delega siempre en las Factorías hijas. 2. Factoría padre que devuelve valor por defecto y casos especiales en Factorías Hijas. 3. Factoría padre con tipo por parámetro. Y también: 4. Variante: Static Factory Method.
  • 7. Ejemplo Familia de productos “Pelota” para diferentes deportes. public abstract class Pelota { float diametro; float peso; String material; public abstract String getTipo(); //Getters y Setters... } public class BaloncestoPelota extends Pelota { public String getTipo() { return "pelota de Baloncesto"; } } public class FutbolPelota extends Pelota { public String getTipo() { return "una pelota de fútbol"; } } public class TenisPelota extends Pelota { public String getTipo() { return "pelota de tenis"; } } public class GenericaPelota extends Pelota { public String getTipo() { return "pelota genérica"; } }
  • 8. Ejemplo Deportistas a los que asignar una pelota para su deporte. public class Deportista { String nombre; Pelota pelota; public Deportista(String nombre) { this.nombre = nombre; } public String getSaludo() { return "Hola, soy " + getNombre() + " y juego con una pelota de " + getPelota().getTipo() + " que pesa " + getPelota().getPeso() + " gramos"; } //Getters y Setters... }
  • 9. Ejemplo Familia de fábricas que construyen productos pelota concreta en cada método (tipo 1) public interface FactoryPelotas { public Pelota create(); } public class FactoryBaloncestoPelotas implements FactoryPelotas { public Pelota create() { return new BaloncestoPelota(); } } public class FactoryFutbolPelotas implements FactoryPelotas { public Pelota create() { return new FutbolPelota(); } } public class FactoryTenisPelotas implements FactoryPelotas { public Pelota create() { return new TenisPelota(); } }
  • 10. Ejemplo Main (Cliente que usa productos) public class main { public static void main(String[] args) { ArrayList<Deportista> deportistas = new ArrayList<Deportista>(); // Definición de deportistas Deportista baloncestoDep = new Deportista("Gasol"); Deportista futbolDep = new Deportista("Messi"); Deportista tenisDep = new Deportista("Nadal"); // Fábricas concretas baloncestoDep.setPelota(new FactoryBaloncestoPelotas().create()); futbolDep.setPelota(new FactoryFutbolPelotas().create()); tenisDep.setPelota(new FactoryTenisPelotas().create()); deportistas.add(baloncestoDep); deportistas.add(futbolDep); deportistas.add(tenisDep); for (Deportista dep : deportistas) { dep.getPelota().setPeso((float) Math.random() * 500); System.out.println( dep.getSaludo()); }} }
  • 11. Factory con parámetro (tipo 3) public class FactoryParamPelotas { public static Pelota create(TipoPelota tipo) { Pelota salida; switch (tipo) { case BALONCESTO: salida = new BaloncestoPelota(); break; case TENIS: salida = new TenisPelota(); break; case FUTBOL: salida = new FutbolPelota(); break; default: salida = new GenericaPelota(); break; } return salida; } } …… baloncestoDep.setPelota( FactoryParamPelotas.create(TipoPelota.BALONCESTO)); baloncestoDep.setPelota( FactoryParamPelotas.create(TipoPelota.FUTBOL)); baloncestoDep.setPelota( FactoryParamPelotas.create(TipoPelota.TENIS));
  • 12. Static Factory Method Método estático que sustituye al constructor Foo x = new Foo(); vs. Foo x = Foo.create(); ...o usando parámetros en la superclase Foo x = Foo.create(tipo1); también mejora la legibilidad del código Punto punto = new Punto(x,y, sistemaMedicion); si lo cambiamos por Punto punto = Punto.createByMetros(x,y); Punto punto2 = Punto.createByInches(x,y);
  • 13. Relación con Abstract Factory AF es un nivel superior de abstracción