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

La actualidad más candente

UML Básico - Casos de uso y Clases
UML Básico - Casos de uso y ClasesUML Básico - Casos de uso y Clases
UML Básico - Casos de uso y ClasesAntonio Moreno
 
Trabajo opengl
Trabajo openglTrabajo opengl
Trabajo openglmakapxndx
 
Constructores en java(grupo 8)
Constructores en java(grupo 8)Constructores en java(grupo 8)
Constructores en java(grupo 8)Manuel Ch.
 
Polimorfismo ppt
Polimorfismo  pptPolimorfismo  ppt
Polimorfismo pptivanvillar7
 
11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()Clara Patricia Avella Ibañez
 
Constructores & excepciones
Constructores & excepcionesConstructores & excepciones
Constructores & excepcionesJuan Mancilla
 
Modelo requisitos UML
Modelo requisitos UMLModelo requisitos UML
Modelo requisitos UMLramirezjaime
 
Identificar el negocio de cliente
Identificar el negocio de clienteIdentificar el negocio de cliente
Identificar el negocio de clienteRene Guaman-Quinche
 
Design Pattern - Factory Method Pattern
Design Pattern - Factory Method PatternDesign Pattern - Factory Method Pattern
Design Pattern - Factory Method PatternMudasir Qazi
 
Diagramas de Clases, Secuencia, Patrones de Diseño MVC, Disño de Interfaces d...
Diagramas de Clases, Secuencia, Patrones de Diseño MVC, Disño de Interfaces d...Diagramas de Clases, Secuencia, Patrones de Diseño MVC, Disño de Interfaces d...
Diagramas de Clases, Secuencia, Patrones de Diseño MVC, Disño de Interfaces d...Oswaldo Hernández
 
Diagramas de caso de uso
Diagramas de caso de usoDiagramas de caso de uso
Diagramas de caso de usoTensor
 

La actualidad más candente (20)

UML Básico - Casos de uso y Clases
UML Básico - Casos de uso y ClasesUML Básico - Casos de uso y Clases
UML Básico - Casos de uso y Clases
 
JNDI
JNDIJNDI
JNDI
 
Trabajo opengl
Trabajo openglTrabajo opengl
Trabajo opengl
 
Greenfoot 3
Greenfoot 3Greenfoot 3
Greenfoot 3
 
Greenfoot 5
Greenfoot 5Greenfoot 5
Greenfoot 5
 
Constructores en java(grupo 8)
Constructores en java(grupo 8)Constructores en java(grupo 8)
Constructores en java(grupo 8)
 
Polimorfismo ppt
Polimorfismo  pptPolimorfismo  ppt
Polimorfismo ppt
 
Casos uso uml
Casos uso umlCasos uso uml
Casos uso uml
 
11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()
 
Constructores & excepciones
Constructores & excepcionesConstructores & excepciones
Constructores & excepciones
 
Modelo requisitos UML
Modelo requisitos UMLModelo requisitos UML
Modelo requisitos UML
 
UML
UMLUML
UML
 
Identificar el negocio de cliente
Identificar el negocio de clienteIdentificar el negocio de cliente
Identificar el negocio de cliente
 
Alice 10
Alice 10Alice 10
Alice 10
 
Design Pattern - Factory Method Pattern
Design Pattern - Factory Method PatternDesign Pattern - Factory Method Pattern
Design Pattern - Factory Method Pattern
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
Diagramas de Clases, Secuencia, Patrones de Diseño MVC, Disño de Interfaces d...
Diagramas de Clases, Secuencia, Patrones de Diseño MVC, Disño de Interfaces d...Diagramas de Clases, Secuencia, Patrones de Diseño MVC, Disño de Interfaces d...
Diagramas de Clases, Secuencia, Patrones de Diseño MVC, Disño de Interfaces d...
 
5.manejo de excepciones
5.manejo de excepciones5.manejo de excepciones
5.manejo de excepciones
 
Diagramas de secuencia
Diagramas de secuenciaDiagramas de secuencia
Diagramas de secuencia
 
Diagramas de caso de uso
Diagramas de caso de usoDiagramas de caso de uso
Diagramas de caso de uso
 

Destacado

Flex observers
Flex observersFlex observers
Flex observersazendal
 
Design Patterns / Patrones de Diseño
Design Patterns / Patrones de DiseñoDesign Patterns / Patrones de Diseño
Design Patterns / Patrones de DiseñoAutentia
 
Presentación open closed principle
Presentación open closed principlePresentación open closed principle
Presentación open closed principleAutentia
 
Patrón Façade
Patrón FaçadePatrón Façade
Patrón FaçadeAutentia
 
Patrones estructurales
Patrones estructuralesPatrones estructurales
Patrones estructuralesAutentia
 
Patrón Decorator
Patrón DecoratorPatrón Decorator
Patrón DecoratorAutentia
 
Measuring code quality:WTF/min by @dgomezg
Measuring code quality:WTF/min by @dgomezgMeasuring code quality:WTF/min by @dgomezg
Measuring code quality:WTF/min by @dgomezgAutentia
 
Patrón Observer
Patrón ObserverPatrón Observer
Patrón ObserverAutentia
 
Método fabrica (Method Factory)
Método fabrica (Method Factory)Método fabrica (Method Factory)
Método fabrica (Method Factory)Jonathan Calero
 
Nativescript
NativescriptNativescript
NativescriptAutentia
 
Patrones de creación
Patrones de creaciónPatrones de creación
Patrones de creaciónAutentia
 
Patrones de diseño: Polimorfismo
Patrones de diseño: PolimorfismoPatrones de diseño: Polimorfismo
Patrones de diseño: PolimorfismoAutentia
 
Design pattern (Abstract Factory & Singleton)
Design pattern (Abstract Factory & Singleton)Design pattern (Abstract Factory & Singleton)
Design pattern (Abstract Factory & Singleton)paramisoft
 

Destacado (19)

Factory method
Factory methodFactory method
Factory method
 
Flex observers
Flex observersFlex observers
Flex observers
 
Design Patterns / Patrones de Diseño
Design Patterns / Patrones de DiseñoDesign Patterns / Patrones de Diseño
Design Patterns / Patrones de Diseño
 
Presentación open closed principle
Presentación open closed principlePresentación open closed principle
Presentación open closed principle
 
Patrón Façade
Patrón FaçadePatrón Façade
Patrón Façade
 
Patrones estructurales
Patrones estructuralesPatrones estructurales
Patrones estructurales
 
Patrón Decorator
Patrón DecoratorPatrón Decorator
Patrón Decorator
 
Measuring code quality:WTF/min by @dgomezg
Measuring code quality:WTF/min by @dgomezgMeasuring code quality:WTF/min by @dgomezg
Measuring code quality:WTF/min by @dgomezg
 
Patrones Creacionales
Patrones CreacionalesPatrones Creacionales
Patrones Creacionales
 
Patrón Observer
Patrón ObserverPatrón Observer
Patrón Observer
 
Método fabrica (Method Factory)
Método fabrica (Method Factory)Método fabrica (Method Factory)
Método fabrica (Method Factory)
 
Nativescript
NativescriptNativescript
Nativescript
 
Singleton
SingletonSingleton
Singleton
 
Factory Design Pattern
Factory Design PatternFactory Design Pattern
Factory Design Pattern
 
Patrones de creación
Patrones de creaciónPatrones de creación
Patrones de creación
 
Patrones de diseño: Polimorfismo
Patrones de diseño: PolimorfismoPatrones de diseño: Polimorfismo
Patrones de diseño: Polimorfismo
 
Factory Method Pattern
Factory Method PatternFactory Method Pattern
Factory Method Pattern
 
Design pattern (Abstract Factory & Singleton)
Design pattern (Abstract Factory & Singleton)Design pattern (Abstract Factory & Singleton)
Design pattern (Abstract Factory & Singleton)
 
Presentacion Patrones Creacionales
Presentacion Patrones CreacionalesPresentacion Patrones Creacionales
Presentacion Patrones Creacionales
 

Similar a Factory method

Patrones de diseño.pptx
Patrones de diseño.pptxPatrones de diseño.pptx
Patrones de diseño.pptxgigoallspam1
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datosjubacalo
 
Programa Java que gestiona los productos que comercializan varios viveros
Programa Java que gestiona los productos que comercializan varios viverosPrograma Java que gestiona los productos que comercializan varios viveros
Programa Java que gestiona los productos que comercializan varios viverosjubacalo
 
Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUGJordi Gerona
 
Creación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyCreación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyJose Juan R. Zuñiga
 
Primera App - Laboratorio Android
Primera App - Laboratorio AndroidPrimera App - Laboratorio Android
Primera App - Laboratorio AndroidGDG Cali
 
Parte II. Notas Rapidas (sticky notes) App W8: MVVM y SQLite.
Parte II. Notas Rapidas (sticky notes) App W8: MVVM y SQLite.Parte II. Notas Rapidas (sticky notes) App W8: MVVM y SQLite.
Parte II. Notas Rapidas (sticky notes) App W8: MVVM y SQLite.Juan Manuel
 
Cuadrado y cubo de un numero
Cuadrado y cubo de un numeroCuadrado y cubo de un numero
Cuadrado y cubo de un numeroRobert Wolf
 
Funciones store proc_triggers
Funciones store proc_triggersFunciones store proc_triggers
Funciones store proc_triggersLuis Jherry
 
Tips componentes swing_v5
Tips componentes swing_v5Tips componentes swing_v5
Tips componentes swing_v5ggzhack
 
SCJP, Clase 8: Inner Classes
SCJP, Clase 8: Inner ClassesSCJP, Clase 8: Inner Classes
SCJP, Clase 8: Inner Classesflekoso
 
Informe tecnico unidad 2
Informe tecnico unidad 2Informe tecnico unidad 2
Informe tecnico unidad 2Irving Che
 
Informetecnicou2 topicos
Informetecnicou2 topicosInformetecnicou2 topicos
Informetecnicou2 topicosKanddy Mobylml
 
CONECTAR C# CON POSTGRESQL USANDO NPGSQL 2.0.11
CONECTAR  C# CON POSTGRESQL  USANDO NPGSQL 2.0.11CONECTAR  C# CON POSTGRESQL  USANDO NPGSQL 2.0.11
CONECTAR C# CON POSTGRESQL USANDO NPGSQL 2.0.11Miguel Angel
 
P R A C T I C A2
P R A C T I C A2P R A C T I C A2
P R A C T I C A2climancc
 

Similar a Factory method (20)

Patrones de diseño.pptx
Patrones de diseño.pptxPatrones de diseño.pptx
Patrones de diseño.pptx
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datos
 
Programa Java que gestiona los productos que comercializan varios viveros
Programa Java que gestiona los productos que comercializan varios viverosPrograma Java que gestiona los productos que comercializan varios viveros
Programa Java que gestiona los productos que comercializan varios viveros
 
Patrones Con C#
Patrones Con C#Patrones Con C#
Patrones Con C#
 
Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUG
 
Sebastian
SebastianSebastian
Sebastian
 
Creación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyCreación de Builders y DSL's con Groovy
Creación de Builders y DSL's con Groovy
 
Primera App - Laboratorio Android
Primera App - Laboratorio AndroidPrimera App - Laboratorio Android
Primera App - Laboratorio Android
 
Parte II. Notas Rapidas (sticky notes) App W8: MVVM y SQLite.
Parte II. Notas Rapidas (sticky notes) App W8: MVVM y SQLite.Parte II. Notas Rapidas (sticky notes) App W8: MVVM y SQLite.
Parte II. Notas Rapidas (sticky notes) App W8: MVVM y SQLite.
 
Cuadrado y cubo de un numero
Cuadrado y cubo de un numeroCuadrado y cubo de un numero
Cuadrado y cubo de un numero
 
ing de sistemas
ing de sistemasing de sistemas
ing de sistemas
 
Funciones store proc_triggers
Funciones store proc_triggersFunciones store proc_triggers
Funciones store proc_triggers
 
Prac1
Prac1Prac1
Prac1
 
P2C2 Introducción a JEE5
P2C2 Introducción a JEE5P2C2 Introducción a JEE5
P2C2 Introducción a JEE5
 
Tips componentes swing_v5
Tips componentes swing_v5Tips componentes swing_v5
Tips componentes swing_v5
 
SCJP, Clase 8: Inner Classes
SCJP, Clase 8: Inner ClassesSCJP, Clase 8: Inner Classes
SCJP, Clase 8: Inner Classes
 
Informe tecnico unidad 2
Informe tecnico unidad 2Informe tecnico unidad 2
Informe tecnico unidad 2
 
Informetecnicou2 topicos
Informetecnicou2 topicosInformetecnicou2 topicos
Informetecnicou2 topicos
 
CONECTAR C# CON POSTGRESQL USANDO NPGSQL 2.0.11
CONECTAR  C# CON POSTGRESQL  USANDO NPGSQL 2.0.11CONECTAR  C# CON POSTGRESQL  USANDO NPGSQL 2.0.11
CONECTAR C# CON POSTGRESQL USANDO NPGSQL 2.0.11
 
P R A C T I C A2
P R A C T I C A2P R A C T I C A2
P R A C T I C A2
 

Último

Licencias para el Uso y el Desarrollo de Software
Licencias para el Uso y el Desarrollo de SoftwareLicencias para el Uso y el Desarrollo de Software
Licencias para el Uso y el Desarrollo de SoftwareAndres Avila
 
Herramientas informáticas. Sara Torres R.
Herramientas informáticas. Sara Torres R.Herramientas informáticas. Sara Torres R.
Herramientas informáticas. Sara Torres R.saravalentinat22
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024DanielErazoMedina
 
Robótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptxRobótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptx44652726
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfcj3806354
 
Sistemas distribuidos de redes de computadores en un entorno virtual de apren...
Sistemas distribuidos de redes de computadores en un entorno virtual de apren...Sistemas distribuidos de redes de computadores en un entorno virtual de apren...
Sistemas distribuidos de redes de computadores en un entorno virtual de apren...Luis Fernando Uribe Villamil
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informáticavazquezgarciajesusma
 
¡Mira mi nuevo diseño hecho en Canva!.pdf
¡Mira mi nuevo diseño hecho en Canva!.pdf¡Mira mi nuevo diseño hecho en Canva!.pdf
¡Mira mi nuevo diseño hecho en Canva!.pdf7adelosriosarangojua
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusraquelariza02
 
Unidad 1- Historia y Evolucion de las computadoras.pdf
Unidad 1- Historia y Evolucion de las computadoras.pdfUnidad 1- Historia y Evolucion de las computadoras.pdf
Unidad 1- Historia y Evolucion de las computadoras.pdfMarianneBAyn
 
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docxwerito139410
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiegoCampos433849
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestrerafaelsalazar0615
 
Pons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdf
Pons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdfPons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdf
Pons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdffrank0071
 
Presentacion y Extension de tema para Blogger.pptx
Presentacion y Extension de tema para Blogger.pptxPresentacion y Extension de tema para Blogger.pptx
Presentacion y Extension de tema para Blogger.pptxTaim11
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxLeidyfuentes19
 
Estudio de la geometría analitica. Pptx.
Estudio de la geometría analitica. Pptx.Estudio de la geometría analitica. Pptx.
Estudio de la geometría analitica. Pptx.sofiasonder
 
Inteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicialInteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicialEducática
 
HerramientasInformaticas ¿Que es? - ¿Para que sirve? - Recomendaciones - Comp...
HerramientasInformaticas ¿Que es? - ¿Para que sirve? - Recomendaciones - Comp...HerramientasInformaticas ¿Que es? - ¿Para que sirve? - Recomendaciones - Comp...
HerramientasInformaticas ¿Que es? - ¿Para que sirve? - Recomendaciones - Comp...Kevin Serna
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfEmilio Casbas
 

Último (20)

Licencias para el Uso y el Desarrollo de Software
Licencias para el Uso y el Desarrollo de SoftwareLicencias para el Uso y el Desarrollo de Software
Licencias para el Uso y el Desarrollo de Software
 
Herramientas informáticas. Sara Torres R.
Herramientas informáticas. Sara Torres R.Herramientas informáticas. Sara Torres R.
Herramientas informáticas. Sara Torres R.
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
 
Robótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptxRobótica educativa para la eduacion primaria .pptx
Robótica educativa para la eduacion primaria .pptx
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
Sistemas distribuidos de redes de computadores en un entorno virtual de apren...
Sistemas distribuidos de redes de computadores en un entorno virtual de apren...Sistemas distribuidos de redes de computadores en un entorno virtual de apren...
Sistemas distribuidos de redes de computadores en un entorno virtual de apren...
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
¡Mira mi nuevo diseño hecho en Canva!.pdf
¡Mira mi nuevo diseño hecho en Canva!.pdf¡Mira mi nuevo diseño hecho en Canva!.pdf
¡Mira mi nuevo diseño hecho en Canva!.pdf
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
 
Unidad 1- Historia y Evolucion de las computadoras.pdf
Unidad 1- Historia y Evolucion de las computadoras.pdfUnidad 1- Historia y Evolucion de las computadoras.pdf
Unidad 1- Historia y Evolucion de las computadoras.pdf
 
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx
3°ð_¦_â_¾ï¸_S34 PLAN DARUKEL DIDÃ_CTICA 23-24.docx
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
 
Pons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdf
Pons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdfPons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdf
Pons, A. - El desorden digital - guia para historiadores y humanistas [2013].pdf
 
Presentacion y Extension de tema para Blogger.pptx
Presentacion y Extension de tema para Blogger.pptxPresentacion y Extension de tema para Blogger.pptx
Presentacion y Extension de tema para Blogger.pptx
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
 
Estudio de la geometría analitica. Pptx.
Estudio de la geometría analitica. Pptx.Estudio de la geometría analitica. Pptx.
Estudio de la geometría analitica. Pptx.
 
Inteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicialInteligencia Artificial para usuarios nivel inicial
Inteligencia Artificial para usuarios nivel inicial
 
HerramientasInformaticas ¿Que es? - ¿Para que sirve? - Recomendaciones - Comp...
HerramientasInformaticas ¿Que es? - ¿Para que sirve? - Recomendaciones - Comp...HerramientasInformaticas ¿Que es? - ¿Para que sirve? - Recomendaciones - Comp...
HerramientasInformaticas ¿Que es? - ¿Para que sirve? - Recomendaciones - Comp...
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
 

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