Páginas

martes, 21 de octubre de 2014

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!

1 comentario: