Escolar Documentos
Profissional Documentos
Cultura Documentos
Los patrones estructurales se centran en cmo se pueden combinar las clases y los
objetos para formar estructuras ms grandes y complejas. Este tipo de patrones es
particularmente til cuando queremos combinar la funcionalidad de varias bibliotecas de
clases que se han desarrollado de forma independiente.
Los patrones estructurales de clases generalmente utilizan la herencia para
componer interfaces que nos permiten establecer las relaciones entre clases. Los patrones
estructurales asociados con objetos describen formas de componer los objetos para
conseguir nueva funcionalidad..
Nombre:
Adaptador
Tambin conocido como Wrapper (encapsulador)
Propiedades:
Tipo: estructural
Nivel: clase
Objetivo o Propsito:
Sirve de intermediario entre dos clases, convirtiendo las interfaces de una clase
para que pueda ser utilizada por otra. Permite que cooperen clases que tienen interfaces
incompatibles.
Aplicabilidad
Se quiere usar una clase existente y su interfaz no concuerda con la que se necesita.
Un objeto tiene que actuar como intermediario para un grupo de clases, y solo es
posible saber en tiempo de ejecucin qu clase ser utilizada.
Se quiere crear una clase reutilizable que coopere con clases no relacionadas o que
no han sido previstas, es decir, clases que no tienen porque tener interfaces
compatibles.
Estructura
Estructura en ingles
Participantes
Consecuencias
Adaptador de Clase
La clase adaptadora puede redefinir y ampliar la interfaz de la clase adaptada. La
clase adaptadora adapta una clase Adaptable a Objetivo, pero se refiere nicamente a una
clase Adaptable concreta, por lo tanto no nos servir para todas sus subclases.
Consecuencias
Adaptador de Objeto:
La clase adaptadora puede utilizar todas las subclases de la clase adaptada, ya que
tiene constancia de los objetos que instancia.
Patrones relacionados
Bridge: Aunque son parecidos tienen objetivos diferentes ya que Bridge est
pensado para separar una interfaz de su implementacin, mientras que Adapter cambia la
interfaz de un objeto existente.
Decorator: Adapter modifica la interfaz de un objeto, pero mantiene su
funcionalidad, Decorator permite que la interfaz sea igual pero mejora su funcionalidad.
Facade: Es una alternativa a Adaptador cuando en lugar de llamar a un solo
objeto se necesita llamar a varios.
Proxy: Es similar a Adaptador en el sentido en que proporcionan una interfaz,
con la diferencia en que Proxy ofrece la misma interfaz que la clase a la que se llama.
Diagrama ejemplo
Cdigo ejemplo
AdaptadorFecha.java
package Adapter;
//Clase para adaptar fechas USA (MM,DD,AAAA) a ES (DD/MM/AAAA)
import java.util.*;
class AdaptadorFecha implements Fecha {
//Adapta el objeto de tipo Fecha USA
FechaUS fus;
//constructor
public AdaptadorFecha(FechaUS fus) {
this.fus = fus;
}
//mtodos
@Override
public String toString() {
StringTokenizer st = new StringTokenizer(fus.toString(), ",");
String mm = st.nextToken();
___________________________________;
String aaaa = st.nextToken();
return dd + "/" + mm + "/" + aaaa;
}
public int getAo() {
return this.fus.getYear();
}
public void setAo(int ao) {
_______________________________;
}
public int getDia() {
__________________________________________;
}
public void setDia(int dia) {
this.fus.setDay(dia);
}
public int getMes() {
__________________________________________;
}
public void setMes(int mes) {
this.fus.setMonth(mes);
}
}
Fecha.java
package Adapter;
//Interface para manejar fechas en ES (DD/MM/AAAA)
interface Fecha {
@Override
public String toString();
public int getAo();
public void setAo(int ao);
public int getDia();
_____________________________________;
public int getMes();
________________________________________;
}
FechaUS.java
package Adapter;
//Clase para manejar fechas en USA (MM,DD,AAAA)
import java.util.*;
class FechaUS {
//atributos
private int year;
private int month;
private int day;
//constructores
public FechaUS(int month, int day, int year) {
________________________________;
this.month = month;
__________________________________________;
}
public FechaUS(String date) {
StringTokenizer st = new StringTokenizer(date, ",");
String mm = st.nextToken();
________________________________________________;
________________________________________________;
____________________________________________;
this.month = Integer.parseInt(mm);
this.year = Integer.parseInt(aa);
}
//mtodos
@Override
public String toString() {
return month + "," + day + "," + year;
}
public int getYear() {
return this.year;
}
public void setYear(int year) {
this.year = year;
}
public int getDay() {
return this.day;
}
public void setDay(int day) {
this.day = day;
}
public int getMonth() {
return this.month;
}
public void setMonth(int month) {
this.month = month;
}
}
Cliente.java
package Adapter;
import java.io.*;
public class Cliente {
public static void main(String args[]) throws IOException {