0% encontró este documento útil (0 votos)
5 vistas8 páginas

Patrón de Diseño: Factory Method

El patrón Factory Method es un patrón de diseño creacional que proporciona una interfaz para crear objetos en una superclase, mientras permite a las subclases alterar el tipo de objetos que se crearán.

Cargado por

micuentaruiz2
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
5 vistas8 páginas

Patrón de Diseño: Factory Method

El patrón Factory Method es un patrón de diseño creacional que proporciona una interfaz para crear objetos en una superclase, mientras permite a las subclases alterar el tipo de objetos que se crearán.

Cargado por

micuentaruiz2
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Factory method

Tipo del patron:


Es un patrón de diseño creacional que proporciona una interfaz para crear objetos
en una superclase, mientras permite a las subclases alterar el tipo de objetos que se
crearán.

Problema

Imagina que estás creando una aplicación de gestión logística. La primera versión
de tu aplicación sólo es capaz de manejar el transporte en camión, por lo que la
mayor parte de tu código se encuentra dentro de la clase Camión .

Al cabo de un tiempo, tu aplicación se vuelve bastante popular. Cada día recibes


decenas de peticiones de empresas de transporte marítimo para que incorpores la
logística por mar a la aplicación.

Estupendo, ¿verdad? Pero, ¿qué pasa con el código? En este momento, la mayor
parte de tu código está acoplado a la clase Camión . Para añadir barcos a la
aplicación habría que hacer cambios en toda la base del código. Además, si más

Factory method 1
tarde decides añadir otro tipo de transporte a la aplicación, probablemente tendrás
que volver a hacer todos estos cambios.

Al final acabarás con un código bastante sucio, plagado de condicionales que


cambian el comportamiento de la aplicación dependiendo de la clase de los objetos
de transporte.

Solución

El patrón Factory Method sugiere que, en lugar de llamar al operador new


para construir objetos directamente, se invoque a un método fábrica
especial. No te preocupes: los objetos se siguen creando a través del operador new

, pero se invocan desde el método fábrica. Los objetos devueltos por el método
fábrica a menudo se denominan productos

A simple vista, puede parecer que este cambio no tiene sentido, ya que tan solo
hemos cambiado el lugar desde donde invocamos al constructor. Sin embargo,
piensa en esto: ahora puedes sobrescribir el método fábrica en una subclase y
cambiar la clase de los productos creados por el método.

No obstante, hay una pequeña limitación: las subclases sólo pueden devolver
productos de distintos tipos si dichos productos tienen una clase base o interfaz
común. Además, el método fábrica en la clase base debe tener su tipo de retorno
declarado como dicha interfaz.

Factory method 2
Estructura segun la investigacion

1. El Product declara la interfaz, que es común a todos los objetos que puede
producir la clase creadora(Creator) y sus subclases.

2. Los Productos Concretos son distintas implementaciones de la interfaz de


producto(Product).

3:

La clase Creadora declara el método fábrica que devuelve nuevos objetos de


producto. Es importante que el tipo de retorno de este método coincida con la
interfaz de producto.

Puedes declarar el patrón Factory Method como abstracto para forzar a todas las
subclases a implementar sus propias versiones del método. Como alternativa, el
método fábrica base puede devolver algún tipo de producto por defecto.
Observa que, a pesar de su nombre, la creación de producto no es la principal
responsabilidad de la clase creadora. Normalmente, esta clase cuenta con alguna
lógica de negocios central relacionada con los productos. El patrón Factory Method
ayuda a desacoplar esta lógica de las clases concretas de producto. Aquí tienes una
analogía: una gran empresa de desarrollo de software puede contar con un
departamento de formación de programadores. Sin embargo, la principal función de
la empresa sigue siendo escribir código, no preparar programadores.

4:

Los Creadores Concretos sobrescriben el Factory Method base, de modo que


devuelva un tipo diferente de producto.

Observa que el método fábrica no tiene que crear nuevas instancias todo el tiempo.
También puede devolver objetos existentes de una memoria caché, una agrupación
de objetos, u otra fuente.

Factory method 3
Explicacion de factory con mis palabras

factory o metodo de fabrica es un patron de diseño de construcion que como su


nombre lo dice es crear objetos en clases especiales que seran las creadoras o
fabricas para crear objetos en especifico tomemos como ejemplo un video juego
donde tendremos moustros

En estos ejemplos seran explicados con codigo:

creamos a nuestro producto en este caso sera la interface moustruo a partir de esto
se crea productos concretos

public interface Moustruo {

public void ataque();


public void habilidadEspecial();
}

Factory method 4
creamos los productos concretos o lo moustruos derivados de la interface Moustruo

public class Dragon implements Moustruo {

@Override
public void ataque() {
[Link]("lanzar Bola de fuego");
}

@Override
public void habilidadEspecial() {
[Link]("lluvia de fuego");
}

Creamos un fenix de tipo moustruo

public class Fenix implements Moustruo {

@Override
public void ataque() {
[Link]("llamarada");
}

@Override
public void habilidadEspecial() {
[Link]("resucitacion");
}

creamos un zombie de tipo moustruo

public class Zombie implements Moustruo {

@Override
public void ataque() {
[Link]("atacar al cerebro grrr");
}

@Override
public void habilidadEspecial() {
[Link]("infectar.....");
}

Factory method 5
creamos un gigante de tipo moustruo

public class Gigante implements Moustruo{

@Override
public void ataque() {
[Link]("atacar con mazo");
}

@Override
public void habilidadEspecial() {
[Link]("pisada fuerte");
}

Despues de haber creado nuestro producto y los productos en concretos


empezamos a crear las fabricas o factory que seran los creadores de objetos de los
productos en concreto

Creamos el factory(Fabrica) que se llamara Creador

public interface Creador {


public Moustruo creaMoustruo();
}

creamos clase derivada de la interface Creador que seran las fabricas

creamos la fabrica CreadorAleatorio que nos permitira crear moustruos aleatorios

import [Link];

public class CreadorAleatorio implements Creador {

Factory method 6
@Override
public Moustruo creaMoustruo() {
int numero = (int)([Link]()*4+1);
return listaDeMoustruos().get( numero-1);
}

public ArrayList<Moustruo> listaDeMoustruos(){


ArrayList<Moustruo> moustruos = new ArrayList<>();
[Link](new Dragon());
[Link](new Fenix());
[Link](new Gigante());
[Link](new Zombie());
return moustruos;
}

creamos otra fabrica que se llamara CreadorVoladores que permite crear moustruos
de tipos voladores

public class CrearVoladores implements Creador {


private int selecionado;

public CrearVoladores(int selecionado) {


[Link] = 1;
}

@Override
public Moustruo creaMoustruo() {
Moustruo moustruo = new Fenix();

if(selecionado == 1){
moustruo = new Dragon();
}
return moustruo;
}

public void selecionarVolador(int selecionar){


[Link] = selecionar;
}
}

al final desplegamos nuestro codigo en el main

public class App {


public static void main(String[] args) throws Exception {
//creamos las fabricas o los creadores de productos en este caso mounstruos

Factory method 7
//la primera fabrica crea moustruos aleatorios
Creador creador1 = new CreadorAleatorio();

//Segunda fabrica crea mosutros voladores


CrearVoladores creador2 = new CrearVoladores(1);

[Link]().ataque();;
[Link]().ataque();;
[Link]().habilidadEspecial();;
[Link](0);
[Link]().ataque();;
}
}

Factory method 8

También podría gustarte