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:
Diagrama UML
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:
Clasificación del Patrón:
Estructural
Intención:
Motivación:
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:
Motor
MotorDiesel
MotorGNC
MotorNaftero
MotorAdaptadorGNC
Auto
Chicos espero que allá quedado claro cualquier duda me avisan!
Representación visual:
Diagrama UML
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.
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:
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();
}
}
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:
super claro
ResponderEliminar