Lectores como tú ayudan a apoyar a MUO. Cuando realiza una compra utilizando enlaces en nuestro sitio, podemos ganar una comisión de afiliado. Leer más.

Con el auge de la arquitectura orientada a servicios (SOA), cada vez más organizaciones utilizan servicios de terceros para sus sistemas empresariales. Estas empresas necesitan mantenerse al día con un entorno comercial que cambia rápidamente, lo que puede significar abandonar los servicios de un proveedor de servicios por otro.

En tales casos, la arquitectura existente de una empresa puede ser incompatible con la de un nuevo proveedor. En lugar de perder meses reescribiendo el código empresarial para que sea compatible con el nuevo software, una empresa puede usar el patrón de diseño del adaptador.

¿Qué es el patrón de diseño del adaptador?

El patrón de adaptador permite que las clases que tienen interfaces incompatibles trabajen juntas. Lo hace convirtiendo la interfaz de una clase (o software) existente en una que espera un cliente (o servicio). Hay dos tipos de adaptadores: adaptadores de objeto y adaptadores de clase.

El adaptador de objetos usa la composición para envolver al adaptado con el adaptador, produciendo efectivamente la interfaz que el cliente espera. Entonces, si el cliente espera una cadena, el adaptador tomará un número entero (el adaptado) y le dará las características de una cadena.

El diagrama de clases anterior representa el adaptador de objetos. El clase de adaptador implementa el interfaz de destino, obteniendo acceso efectivo a todos los métodos de la interfaz. Luego adapta un adaptado y envuelve eso adaptado con el interfaz de destino métodos.

El adaptador de clase usa herencia múltiple, donde la clase de adaptador es la subclase tanto del adaptado como de la clase de destino. El siguiente diagrama de clase representa el adaptador de clase, que puede usar libremente en lenguajes de programación que admitan la herencia múltiple.

Implementando el patrón de diseño del adaptador en Java

Esta aplicación implementará el adaptador de objetos. Esta aplicación de muestra simulará la transición de una organización financiera del uso y procesamiento de tarjetas de cargo a tarjetas de crédito. Esta organización usó originalmente la siguiente interfaz de tarjeta de crédito:

públicointerfazTarjeta de cobro{
públicovacíosaldo mensual();
públicovacíocargo por demora();
públicovacíoCuota anual();
}

Un tipo popular de tarjeta de crédito que procesa el sistema de esta organización es la tarjeta plum:

públicoclasePlumCardimplementosTarjeta de cobro{
privadoEn t número de tarjeta;
privado Cadena nombre del cliente;
privadodoble balance;

// constructor principal
públicoPlumCard(En t número de tarjeta, cadena nombre del cliente, doble balance){
este.NroTarjeta = NroTarjeta;
este.nombreCliente = nombreCliente;
este.saldo = saldo;
}

// captadores y definidores
públicoEn tobtenerCardNo(){
devolver número de tarjeta;
}

públicovacíoestablecerCardNo(En t número de tarjeta){
este.NroTarjeta = NroTarjeta;
}

público Cadena getCustomerName(){
devolver Nombre del cliente;
}

públicovacíoestablecerNombreDeCliente(Cadena de nombre del cliente){
este.nombreCliente = nombreCliente;
}

públicodobleobtenersaldo(){
devolver balance;
}

públicovacíoestablecer el saldo(doble balance){
este.saldo = saldo;
}

@Anular
públicovacíosaldo mensual(){
Sistema.fuera.println("En Enero " + este.nombrecliente + " gastado " + este.balance);
}

@Anular
públicovacíocargo por demora(){
Sistema.fuera.println(este.nombrecliente + "el recargo mensual por retraso es de $80.00");
}

@Anular
públicovacíoCuota anual(){
Sistema.fuera.println(este.nombrecliente + "cuota anual es de $200.00");
}
}

Esta institución financiera está haciendo la transición a las tarjetas de crédito y eliminando gradualmente las tarjetas de cargo, por lo que algunos de sus clientes ahora tienen tarjetas de crédito:

públicointerfazTarjeta de crédito{
públicovacíopago mínimo mensual();
públicovacíointerés();
públicovacíoCuota anual();
}

El sistema empresarial de la institución financiera ahora solo procesa tarjetas de crédito, ya que está buscando descontinuar el uso de tarjetas de cargo el próximo año. Pero la mayoría de sus clientes todavía usan tarjetas de crédito. Entonces, los ingenieros decidieron que era mejor implementar un adaptador hasta que todos sus clientes hicieran la transición a una tarjeta de crédito.

públicoclaseAdaptador de tarjeta de cargaimplementosTarjeta de crédito{
tarjeta de cargo tarjeta de cargo;

públicoAdaptador de tarjeta de carga(Tarjeta de cargo Tarjeta de cargo){
este.chargeCard = cargoCard;
}

@Anular
públicovacíopago mínimo mensual(){
este.chargeCard.monthlyBalance();
}

@Anular
públicovacíointerés(){
este.chargeCard.tardeFee();
}

@Anular
públicovacíoCuota anual(){
este.tarjeta de cargo. Cuota anual();
}
}

Este adaptador de tarjeta de carga clase Java implementa la Tarjeta de Crédito interfaz Java. Adapta ChargeCard (el adaptado), dándole las características de una tarjeta de crédito. Por ejemplo, el sistema procesará el cargo de interés de una tarjeta de crédito, que es el cargo por pago atrasado de un cliente de tarjeta de crédito que aún no se ha convertido.

Ventajas de usar el patrón adaptador

La principal ventaja de usar el patrón de adaptador es que permite a los clientes usar nuevos servicios, bibliotecas y características sin cambiar su código. Esto promueve la escalabilidad de la aplicación.

Otra ventaja es que este patrón también es flexible. El patrón de adaptador proporciona dos métodos de implementación: adaptadores de objetos y adaptadores de clases.