ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

La estructura típica del patrón Abstract Factory


Enviado por   •  19 de Noviembre de 2014  •  2.853 Palabras (12 Páginas)  •  210 Visitas

Página 1 de 12

Abstract Factory

>Contexto y Problema

Contexto: Debemos crear diferentes objetos, todos pertenecientes a la misma familia. Por ejemplo: las bibliotecas para crear interfaces gráficas suelen utilizar este patrón y cada familia sería un sistema operativo distinto. Así pues, el usuario declara un Botón, pero de forma más interna lo que está creando es un BotónWindows o un BotónLinux, por ejemplo.

El problema que intenta solucionar este patrón es el de crear diferentes familias de objetos.

El patrón Abstract Factory está aconsejado cuando se prevé la inclusión de nuevas familias de productos, pero puede resultar contraproducente cuando se añaden nuevos productos o cambian los existentes, puesto que afectaría a todas las familias creadas.

>Aspecto estático

La estructura típica del patrón Abstract Factory es la siguiente:

• Cliente: La clase que llamará a la factoría adecuada ya que necesita crear uno de los objetos que provee la factoría, es decir, Cliente lo que quiere es obtener una instancia de alguno de los productos (ProductoA, ProductoB).

• AbstractFactory: Es la definición de la interfaces de las factorías. Debe de proveer un método para la obtención de cada objeto que pueda crear. ("crearProductoA()" y "crearProductoB()")

• Factorías Concretas: Estas son las diferentes familias de productos. Provee de la instancia concreta de la que se encarga de crear. De esta forma podemos tener una factoría que cree los elementos gráficos para Windows y otra que los cree para Linux, pudiendo poner fácilmente (creando una nueva) otra que los cree para MacOS, por ejemplo.

• Producto abstracto: Definición de las interfaces para la familia de productos genéricos. En el diagrama son "ProductoA" y "ProductoB". En un ejemplo de interfaces gráficas podrían ser todos los elementos: Botón, Ventana, Cuadro de Texto, Combo... El cliente trabajará directamente sobre esta interfaz, que será implementada por los diferentes productos concretos.

• Producto concreto: Implementación de los diferentes productos. Podría ser por ejemplo "BotónWindows" y "BotónLinux". Como ambos implementan "Botón" el cliente no sabrá si está en Windows o Linux, puesto que trabajará directamente sobre la superclase o interfaz.

Singleton

El patrón de diseño singleton (instancia única) está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto.

Su intención consiste en garantizar que una clase sólo tenga una instancia y proporcionar un punto de acceso global a ella.

El patrón singleton se implementa creando en nuestra clase un método que crea una instancia del objeto sólo si todavía no existe alguna. Para asegurar que la clase no puede ser instanciada nuevamente se regula el alcance del constructor (con atributos como protegido o privado).

La instrumentación del patrón puede ser delicada en programas con múltiples hilos de ejecución. Si dos hilos de ejecución intentan crear la instancia al mismo tiempo y esta no existe todavía, sólo uno de ellos debe lograr crear el objeto. La solución clásica para este problema es utilizar exclusión mutua en el método de creación de la clase que implementa el patrón.

Las situaciones más habituales de aplicación de este patrón son aquellas en las que dicha clase controla el acceso a un recurso físico único (como puede ser el ratón o un archivo abierto en modo exclusivo) o cuando cierto tipo de datos debe estar disponible para todos los demás objetos de la aplicación.

El patrón singleton provee una única instancia global gracias a que:

• La propia clase es responsable de crear la única instancia.

• Permite el acceso global a dicha instancia mediante un método de clase.

• Declara el constructor de clase como privado para que no sea instanciable directamente.

>Ejemplo de implementación en JAVA:

public class Singleton {

private static Singleton INSTANCE = new Singleton();

// El constructor privado no permite que se genere un constructor por defecto.

// (con mismo modificador de acceso que la definición de la clase)

private Singleton() {}

public static Singleton getInstance() {

return INSTANCE;

}

}

Adapter

El patrón Adapter (Adaptador) se utiliza para transformar una interfaz en otra, de tal modo que una clase que no pudiera utilizar la primera, haga uso de ella a través de la segunda.

Usar el patrón Adapter cuando:

• Se desea usar una clase existente, y su interfaz no se iguala con la necesitada.

• Cuando se desea crear una clase reusable que coopera con clases no relacionadas, es decir, las clases no tienen necesariamente interfaces compatibles.

>Estructura

>Participantes

• Target define la interfaz específica del dominio que Client usa.

• Client colabora con la conformación de objetos para la interfaz Target.

• Adaptee define una interfaz existente que necesita adaptarse

• Adapter adapta la interfaz de Adaptee a la interfaz Target

>Implementación

package Structural_patterns;

public class AdapterWrapperPattern {

public static void main(String args[]){

Guitar eGuitar = new ElectricGuitar();

eGuitar.onGuitar();

eGuitar.offGuitar();

Guitar eAGuitar = new ElectricAcousticGuitar();

eAGuitar.onGuitar();

eAGuitar.offGuitar();

}

public abstract class Guitar{

abstract public void onGuitar();

abstract public void offGuitar();

}

public class ElectricGuitar extends Guitar{

public void onGuitar() {

System.out.println("Playing Guitar");

}

public void offGuitar() {

System.out.println("I'm tired to play the guitar");

}

}

/**

* Class to Adapter/Wrapper

*/

public class AcousticGuitar{

public void play(){

System.out.println("Playing Guitar");

}

public void leaveGuitar(){

System.out.println("I'm tired to play the guitar");

}

}

/**

* we Adapter/Wrapper AcousticGuitar into

* ElectricAcousticGuitar

...

Descargar como (para miembros actualizados) txt (19 Kb)
Leer 11 páginas más »
Disponible sólo en Clubensayos.com