14
  Atenco Flores Eduardo. Sánchez Mora María Victoria. Solís Cabrera Daniel Agustín. Salas Espinoza Oswaldo.

The Abstract Factory Pattern

  • Upload
    yayo-af

  • View
    53

  • Download
    0

Embed Size (px)

Citation preview

Page 1: The Abstract Factory Pattern

5/10/2018 The Abstract Factory Pattern - slidepdf.com

http://slidepdf.com/reader/full/the-abstract-factory-pattern 1/14

 

 Atenco Flores Eduardo.

Sánchez Mora María Victoria.

Solís Cabrera Daniel Agustín.

Salas Espinoza Oswaldo.

Page 2: The Abstract Factory Pattern

5/10/2018 The Abstract Factory Pattern - slidepdf.com

http://slidepdf.com/reader/full/the-abstract-factory-pattern 2/14

 

El Patrón de Fábrica AbstractoEl patrón Abstract Factory es un nivel de abstracción más

alto que el patrón de la fábrica. Puede utilizar este modelo

cuando desea volver a una de varias clases relacionadas de

objetos, cada uno de los cuales puede devolver varios

objetos diferentes a petición. En otras palabras, la fábrica

abstracta es un objeto de fábrica que devuelve uno de

varias fábricas. Una de las aplicaciones clásicas de la fábrica

abstracta es el caso de que el sistema necesita para

soportar múltiples "look-and-feel" interfaces de usuario,

tales como Windows 9x, Motif o Macintosh.

Page 3: The Abstract Factory Pattern

5/10/2018 The Abstract Factory Pattern - slidepdf.com

http://slidepdf.com/reader/full/the-abstract-factory-pattern 3/14

 

A GardenMaker Factory Veamos un ejemplo sencillo donde es posible que desee utilizarla fábrica abstracta a nivel de aplicación. Suponga que estáescribiendo un programa para planificar el diseño de los jardines.Estos podrían ser los jardines anuales, huertos o jardines

perennes. Sin embargo, no importa qué tipo de jardín que estáplaneando, quiere hacer las preguntas:

1. ¿Cuáles son las plantas buenas de la frontera?

2. ¿Cuáles son las plantas buenas del centro?

3. ¿Qué plantas hacen sombra parcial?

Page 4: The Abstract Factory Pattern

5/10/2018 The Abstract Factory Pattern - slidepdf.com

http://slidepdf.com/reader/full/the-abstract-factory-pattern 4/14

 

A GardenMaker Factory Queremos una clase de jardín(Garden) de base que pueden

responder a estas preguntas:

public abstract class Garden{

public abstract Plant getCenter();

public abstract Plant getBorder();

public abstract Plant getShade();

}

(Algo parecido a una Interface)

Page 5: The Abstract Factory Pattern

5/10/2018 The Abstract Factory Pattern - slidepdf.com

http://slidepdf.com/reader/full/the-abstract-factory-pattern 5/14

 

A GardenMaker Factory donde nuestro objeto simple Plant sólo contiene y devuelve el nombre de la planta:

public class Plant

{

String name;

public Plant(String pname){

name = pname; //save name

}

public String getName()

{

return name;}

}

(esto nos hace recordar algo parecido Set y Get)

Page 6: The Abstract Factory Pattern

5/10/2018 The Abstract Factory Pattern - slidepdf.com

http://slidepdf.com/reader/full/the-abstract-factory-pattern 6/14

 

A GardenMaker Factory Ahora bien, en un sistema real, cada tipo de jardín es

probable consultar una base de datos elaborada de

información de la planta. En nuestro ejemplo vamos a

volver un tipo de cada planta. Así, por ejemplo, para el

huerto simplemente escribimos.

Page 7: The Abstract Factory Pattern

5/10/2018 The Abstract Factory Pattern - slidepdf.com

http://slidepdf.com/reader/full/the-abstract-factory-pattern 7/14

A GardenMaker Factory Ahora tenemos una serie de objetos de jardín, cada uno de los cuales devuelve uno de losobjetos de varias plantas. Es fácil construir la fábrica abstracta para devolver uno de estos objetosJardín basado en la cadena que se da como un argumento:

class GardenMaker

{

// Abstract Factory que devuelve uno de los tres jardinesprivate Garden gd;

public Garden getGarden(String gtype)

{

gd = new VegieGarden(); //default

if(gtype.equals("Perennial"))

gd = new PerennialGarden();

if(gtype.equals("Annual"))

gd = new AnnualGarden();

return gd;

}

}

 

Page 8: The Abstract Factory Pattern

5/10/2018 The Abstract Factory Pattern - slidepdf.com

http://slidepdf.com/reader/full/the-abstract-factory-pattern 8/14

A GardenMaker Factory Este sistema de fábrica sencillo se puede utilizar junto con

una interfaz de usuario más complejas para seleccionar el

 jardín y comenzar a planificar como se muestra a

continuación:

 

Page 9: The Abstract Factory Pattern

5/10/2018 The Abstract Factory Pattern - slidepdf.com

http://slidepdf.com/reader/full/the-abstract-factory-pattern 9/14

¿Cómo funciona la interfaz de

usuario?Esta interfaz simple consta de dos partes: el lado izquierdo,

que selecciona el tipo de jardín y al lado derecho, que

selecciona la categoría de planta. Al hacer clic en uno de los

tipos de jardín, este acciona el Abstract Factory

MakeGarden. Esta función devuelve un tipo de jardín que

depende del nombre del texto del título del botón de radio.

 

Page 10: The Abstract Factory Pattern

5/10/2018 The Abstract Factory Pattern - slidepdf.com

http://slidepdf.com/reader/full/the-abstract-factory-pattern 10/14

public void itemStateChanged(ItemEvent e)

{

Checkbox ck = (Checkbox)e.getSource();

//obtener un tipo de jardín sobre la base de la etiquetade botón de radio

garden = new GardenMaker().getGarden(ck.getLabel());

// Borrar los nombres de las plantas en la pantallashadePlant=""; centerPlant=""; borderPlant = "";

gardenPlot.repaint(); //Despliega Jardín Vacio

}

 

Page 11: The Abstract Factory Pattern

5/10/2018 The Abstract Factory Pattern - slidepdf.com

http://slidepdf.com/reader/full/the-abstract-factory-pattern 11/14

Entonces, cuando un usuario hace clic en uno de los

botones de tipo de planta, el tipo de planta se devuelve y se

muestra el nombre de esa planta:

 

Page 12: The Abstract Factory Pattern

5/10/2018 The Abstract Factory Pattern - slidepdf.com

http://slidepdf.com/reader/full/the-abstract-factory-pattern 12/14

La clave para mostrar los nombres de las plantas es el panel solar ajardinado, donde se hanextraído.

class GardenPanel extends Panel

{public void paint (Graphics g)

{

//obtener el tamaño del panel

Dimension sz = getSize();

//llamar la sombra del árbol

g.setColor(Color.lightGray);

g.fillArc( 0, 0, 80, 80,0, 360);

//sacar nombres de plantas, algunas pueden ser cadenas en blanco

g.setColor(Color.black);

g.drawRect(0,0, sz.width-1, sz.height-1);

g.drawString(centerPlant, 100, 50);

g.drawString( borderPlant, 75, 120);

g.drawString(shadePlant, 10, 40);}

}

}

5

 

Page 13: The Abstract Factory Pattern

5/10/2018 The Abstract Factory Pattern - slidepdf.com

http://slidepdf.com/reader/full/the-abstract-factory-pattern 13/14

Consecuencias de Abstract FactoryUno de los propósitos principales de la Fábrica de abstracta esque aísla las clases concretas que se generan. Los nombres declase real de estas clases están ocultos en la fábrica y no

necesitan ser conocidos a nivel de cliente en absoluto. Debidoal aislamiento de las clases, puede cambiar o intercambiar lasfamilias de la clase de productos libremente. Además, puestoque sólo generan un tipo de clase concreto, este sistema semantiene para darse cuenta con clases de diferentes familias

de productos. Sin embargo, es un esfuerzo para añadir lasnuevas familias de clase, ya que se necesita para definir lasnuevas condiciones, sin ambigüedades que causan una nuevafamilia de clases para ser devueltos.