Patrones de Diseño - Patrón Adapter/ Adaptador / Wrapper - ¿Que es el Patrón de Diseño Adapter?

Hola amigos! ya terminando los patrones de diseño estructurales, hoy vamos a ver el patrón Adapter/Adaptador.

Patrones de Diseño -  ¿Que es el Patrón de Diseño Adapter?

El patrón de diseño Adapter establece una capa intermedia que permita comunicarse a dos clases que de otro modo no podrían hacerlo, realizando una adaptación de la interfaz de la clase que proporciona el servicio a la que la solicita.

Representación visual:


Patrones de Diseño - Patrón Adapter/ Adaptador / Wrapper - ¿Que es el Patrón de Diseño Adapter?


Diagrama UML

Patrones de Diseño - Patrón Adapter/ Adaptador / Wrapper - ¿Que es el Patrón de Diseño Adapter?



Objetivo: Define el dominio de la interfaz que el cliente usa.
Cliente: Colabora con los objetos conformando la interfaz Objetivo.
Adaptado: Define la Interfaz existente que necesita adaptación.
Adaptador: Adapta la Interfaz "Adaptado" para usar en Objetivo.

Nombre del patrón:
Patrón Adapter/ Adaptador / Wrapper

Clasificación del Patrón:
Estructural

Intención:
Sirve como intermediario entre dos clases, convirtiendo las interfases de una clase que pueda ser utilizada por otra. 


Motivación:
A veces una clase es diseñada para que sea reusable, pero no lo es, porque la interfase no con concuerda con la interfase que una aplicación requiere.

Ejemplo:
Problema: Actualmente se tiene un auto, el mismo puede tener 3 tipos de motores diferentes: Naftero, Diesel y a GNC (Gas Natural Comprimido), pero este ultimo el GNC no posee los métodos de prender y apagar, sino de calentar y parar. Se requiere que el auto pueda utilizar cualquiera de estos motores indiferentemente.

Solución:


Patrones de Diseño - Patrón Adapter/ Adaptador / Wrapper - ¿Que es el Patrón de Diseño Adapter?

Motor
package ar.com.patronesdisenio.adapter.abs;
/**
* @author nconde
*/
public abstract class Motor {

public abstract void encender();
public abstract void apagar();
}



MotorDiesel
package ar.com.patronesdisenio.adapter.imp;
import ar.com.patronesdisenio.adapter.abs.Motor;
/**
* @author nconde
*/
public class MotorDiesel extends Motor {

@Override
public void encender() {
System.out.println("Encender motor Diesel");
}

@Override
public void apagar() {
System.out.println("Apagar motor Diesel");
}

}



MotorGNC
package ar.com.patronesdisenio.adapter.imp;

/**
* @author nconde
*/
public class MotorGNC {

public void calentar(){
System.out.println("Calentando el motor GNC");
}
public void parar(){
System.out.println("Parando el motor GNC");
}

}



MotorNaftero
package ar.com.patronesdisenio.adapter.imp;
import ar.com.patronesdisenio.adapter.abs.Motor;
/**
* @author nconde
*/
public class MotorNaftero extends Motor {

@Override
public void encender() {
System.out.println("Encender motor Naftero");
}

@Override
public void apagar() {
System.out.println("Apagar motor Naftero");
}

}



MotorAdaptadorGNC
package ar.com.patronesdisenio.adapter.imp;
import ar.com.patronesdisenio.adapter.abs.Motor;
/**
* @author nconde
*/
public class MotorAdaptadorGNC extends Motor {
MotorGNC motorGNC;

public MotorAdaptadorGNC(){
this.motorGNC = new MotorGNC();
}
@Override
public void encender() {
System.out.println("Encender motor GNC");
this.motorGNC.calentar();
}

@Override
public void apagar() {
System.out.println("Apagar motor GNC");
this.motorGNC.parar();
}

}



Auto
package ar.com.patronesdisenio.adapter;
import ar.com.patronesdisenio.adapter.abs.Motor;
import ar.com.patronesdisenio.adapter.imp.MotorAdaptadorGNC;
import ar.com.patronesdisenio.adapter.imp.MotorDiesel;
import ar.com.patronesdisenio.adapter.imp.MotorNaftero;

/**
* @author nconde
*/
public class Auto {

/**
* @param args
*/
public static void main(String[] args) {
//Motor Diesel
Motor motorDiesel = new MotorDiesel();
motorDiesel.encender();
motorDiesel.apagar();

//Motor Naftero
Motor motorNaftero = new MotorNaftero();
motorNaftero.encender();
motorNaftero.apagar();

//Motor GNC
Motor motorAdaptadorGNC= new MotorAdaptadorGNC();
motorAdaptadorGNC.encender();
motorAdaptadorGNC.apagar();
}
}


Chicos espero que allá quedado claro cualquier duda me avisan!
Patrones de Diseño - Patrón Adapter/ Adaptador / Wrapper - ¿Que es el Patrón de Diseño Adapter? Patrones de Diseño - Patrón Adapter/ Adaptador / Wrapper - ¿Que es el Patrón de Diseño Adapter? Reviewed by El lado oscuro de java on octubre 21, 2014 Rating: 5

1 comentario:

Con la tecnología de Blogger.