SlideShare una empresa de Scribd logo
1 de 14
Descargar para leer sin conexión
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

Algoritmo de servidor centralizado
Algoritmo de servidor centralizadoAlgoritmo de servidor centralizado
Algoritmo de servidor centralizadostevencueva3
 
Command Design Pattern
Command Design PatternCommand Design Pattern
Command Design PatternShahriar Hyder
 
constructors in java ppt
constructors in java pptconstructors in java ppt
constructors in java pptkunal kishore
 
Enumeration in Java Explained | Java Tutorial | Edureka
Enumeration in Java Explained | Java Tutorial | EdurekaEnumeration in Java Explained | Java Tutorial | Edureka
Enumeration in Java Explained | Java Tutorial | EdurekaEdureka!
 
PHP Performance Trivia
PHP Performance TriviaPHP Performance Trivia
PHP Performance TriviaNikita Popov
 
Java DataBase Connectivity API (JDBC API)
Java DataBase Connectivity API (JDBC API)Java DataBase Connectivity API (JDBC API)
Java DataBase Connectivity API (JDBC API)Luzan Baral
 
Understanding Cross-site Request Forgery
Understanding Cross-site Request ForgeryUnderstanding Cross-site Request Forgery
Understanding Cross-site Request ForgeryDaniel Miessler
 
Asp.net state management
Asp.net state managementAsp.net state management
Asp.net state managementpriya Nithya
 
Arreglo de punteros
Arreglo de punterosArreglo de punteros
Arreglo de punterospedreror1
 
packages and interfaces
packages and interfacespackages and interfaces
packages and interfacesmadhavi patil
 
Java Inheritance
Java InheritanceJava Inheritance
Java InheritanceVINOTH R
 
[DEFCON 16] Bypassing pre-boot authentication passwords by instrumenting the...
[DEFCON 16] Bypassing pre-boot authentication passwords  by instrumenting the...[DEFCON 16] Bypassing pre-boot authentication passwords  by instrumenting the...
[DEFCON 16] Bypassing pre-boot authentication passwords by instrumenting the...Moabi.com
 
Super Keyword in Java.pptx
Super Keyword in Java.pptxSuper Keyword in Java.pptx
Super Keyword in Java.pptxKrutikaWankhade1
 

La actualidad más candente (20)

Algoritmo de servidor centralizado
Algoritmo de servidor centralizadoAlgoritmo de servidor centralizado
Algoritmo de servidor centralizado
 
Java colecciones
Java coleccionesJava colecciones
Java colecciones
 
Command Design Pattern
Command Design PatternCommand Design Pattern
Command Design Pattern
 
Spring data jpa
Spring data jpaSpring data jpa
Spring data jpa
 
constructors in java ppt
constructors in java pptconstructors in java ppt
constructors in java ppt
 
Enumeration in Java Explained | Java Tutorial | Edureka
Enumeration in Java Explained | Java Tutorial | EdurekaEnumeration in Java Explained | Java Tutorial | Edureka
Enumeration in Java Explained | Java Tutorial | Edureka
 
PHP Performance Trivia
PHP Performance TriviaPHP Performance Trivia
PHP Performance Trivia
 
Java DataBase Connectivity API (JDBC API)
Java DataBase Connectivity API (JDBC API)Java DataBase Connectivity API (JDBC API)
Java DataBase Connectivity API (JDBC API)
 
JUnit Presentation
JUnit PresentationJUnit Presentation
JUnit Presentation
 
Understanding Cross-site Request Forgery
Understanding Cross-site Request ForgeryUnderstanding Cross-site Request Forgery
Understanding Cross-site Request Forgery
 
Padrão Command
Padrão CommandPadrão Command
Padrão Command
 
Asp.net state management
Asp.net state managementAsp.net state management
Asp.net state management
 
Threads concept in java
Threads concept in javaThreads concept in java
Threads concept in java
 
Arreglo de punteros
Arreglo de punterosArreglo de punteros
Arreglo de punteros
 
packages and interfaces
packages and interfacespackages and interfaces
packages and interfaces
 
Java Inheritance
Java InheritanceJava Inheritance
Java Inheritance
 
[DEFCON 16] Bypassing pre-boot authentication passwords by instrumenting the...
[DEFCON 16] Bypassing pre-boot authentication passwords  by instrumenting the...[DEFCON 16] Bypassing pre-boot authentication passwords  by instrumenting the...
[DEFCON 16] Bypassing pre-boot authentication passwords by instrumenting the...
 
Factory Method Pattern
Factory Method PatternFactory Method Pattern
Factory Method Pattern
 
Super Keyword in Java.pptx
Super Keyword in Java.pptxSuper Keyword in Java.pptx
Super Keyword in Java.pptx
 
Exception handling
Exception handlingException handling
Exception handling
 

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

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
 
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

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 

Último (16)

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 

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