You are on page 1of 6

Arquitectura de software y de la información Universidad Privada Antenor Orrego

Ing. Carlos Jara García

Clase de diseño de software Estructural


Class Adapter:

Object Adapter:

Donde:

Adaptee: Se trata de la clase adaptada (o a adaptar). Se trata de una clase existente la cual
pretendemos adaptar para que funcione bajo una nueva interfaz. Puede haber varios Adaptees.

Target: Nueva interfaz utilizada por Client a la que debemos adaptar a Adaptee.

Adaptor: Clase que implementará la interfaz Target y se encargará de que la antigua funcionalidad
obedezca a la misma.

Client: Utiliza la funcionalidad de Adaptee de acuerdo a la interfaz Target implementada por


Adaptor.

Consecuencias:

POSITIVAS:

Permite adaptar clases en dominios totalmente diferentes.

Un único adaptador puede adaptar la funcionalidad de múltiples clases.

NEGATIVAS:

pág. 1
Arquitectura de software y de la información Universidad Privada Antenor Orrego
Ing. Carlos Jara García
Dependiendo de la implementación, el adaptador puede contener múltiples punteros que
incrementen la complejidad del sistema.

Patrones Relacionados: Bridge, Decorator, Facade y Proxy

Ejemplo:

Utilizaremos un ejemplo sencillo para entender bien la funcionalidad: Queremos adaptar una
interfaz HDMI para que se vea en televisiones con RCA. En primer lugar definiremos la clase
adaptada (Adaptee):

public class HDMI{

public HDMI(){

System.out.println("Nuevo conector HDMI creado.");

public void obtenerVideoHD(){

System.out.println("Video obtenido desde fuente HD.");

public void obtenerAudioHD(){

System.out.println("Audio obtenido desde fuente HD.");

Continuaremos definiendo la interfaz que necesitamos en nuestro sistema actual (Target):

public interface RCA{

public void obtenerCanalVideo();

public void obtenerCanalAudioDcho();

public void obtenerCanalAudioIzdo();

pág. 2
Arquitectura de software y de la información Universidad Privada Antenor Orrego
Ing. Carlos Jara García

A continuación, definiremos el adaptador (Adapter). Crearemos 2 adaptadores para ilustrar los 2


tipos de adaptadores (clases y objetos):

// Adaptador de Clases

public class HDMItoRCAClassAdapter extends HDMI implements RCA{

public void obtenerCanalVideo(){

extraerVideo();

public void obtenerCanalAudioDcho(){

extraerAudioDcho();

public void obtenerCanalAudioIzdo(){

extraerAudioIzdo();

private void extraerVideo(){

obtenerVideoHD();

System.out.println("Convertir fuente de video HD a Video analógico");

private void extraerAudioDcho(){

obtenerAudioHD();

System.out.println("Extrayendo canal Derecho de Audio");

System.out.println("Convertir fuente de audio HD a Audio analógico Derecho");

private void extraerAudioIzdo(){

obtenerAudioHD();

System.out.println("Extrayendo canal Izquierdo de Audio");

System.out.println("Convertir fuente de audio HD a Audio analógico Izquierdo");

pág. 3
Arquitectura de software y de la información Universidad Privada Antenor Orrego
Ing. Carlos Jara García

// Adaptador de Objetos

public class HDMItoRCAObjectAdapter implements RCA{

private HDMI fuente;

public HDMItoRCAObjectAdapter(){

fuente = new HDMI();

public void obtenerCanalVideo(){

extraerVideo();

public void obtenerCanalAudioDcho(){

extraerAudioDcho();

public void obtenerCanalAudioIzdo(){

extraerAudioIzdo();

private void extraerVideo(){

fuente.obtenerVideoHD();

System.out.println("Convertir fuente de video HD a Video analógico");

private void extraerAudioDcho(){

fuente.obtenerAudioHD();

System.out.println("Extrayendo canal Derecho de Audio");

System.out.println("Convertir fuente de audio HD a Audio analógico Derecho");

pág. 4
Arquitectura de software y de la información Universidad Privada Antenor Orrego
Ing. Carlos Jara García
private void extraerAudioIzdo(){

fuente.obtenerAudioHD();

System.out.println("Extrayendo canal Izquierdo de Audio");

System.out.println("Convertir fuente de audio HD a Audio analógico Izquierdo");

Por último queda definir un cliente que utilice el adaptador, que lo simplificaremos mostrando
únicamente el método main():

public static void main(String args){

RCA conector=null;

if(args[0].equals("ClassAdapter")){

conector = new HDMItoRCAClassAdapter();

} else if(args[1].equals("ObjectAdapter")){

conector = new HDMItoRCAObjectAdapter();

// De esta manera conseguimos trabajar con video HDMI como si fuese analógico

conector.obtenerCanalVideo();

conector.obtenerCanalAudioDcho();

conector.obtenerCanalAudioIzdo();

Práctica:

Se necesita realizar un programa que realice la conversión de moneda soles a dólares para realizar
las transacciones en caja de una empresa exportadora usando un objeto adaptador que permite
comunicarse con otro objeto que gestiona los ingresos y egresos en dólares (Gestión Caja).

Los métodos del interfaz objetivo son Recaudar en Soles y Pagar en Soles.

La clase adaptadora deberá contemplar adicionalmente el método de Obtener Saldo.

La clase adaptable (Caja en dólares) deberá tener implementado los métodos Obtener el Total en
dólares, Recaudo en dólares, pago en dólares que son los métodos utilizados por la clase
adaptadora.

pág. 5
Arquitectura de software y de la información Universidad Privada Antenor Orrego
Ing. Carlos Jara García

pág. 6