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(); } }



super claro
ResponderEliminar