Adapter - Patrones de Diseño

A
Antonio Leiva
3 min lectura

El patrón de diseño Adapter es una técnica muy utilizada en el desarrollo de software para adaptar una interfaz de una clase a otra interfaz que se espera utilizar. Esto permite que las clases que no sean compatibles entre sí puedan trabajar juntas y ofrecer una funcionalidad similar.

Un ejemplo común de utilización de este patrón es cuando se desea utilizar una librería o una clase que no se ajusta completamente a nuestras necesidades y requerimientos. En lugar de reescribir completamente la clase o librería, podemos utilizar un Adapter para adaptar su interfaz a la que necesitamos.

En Kotlin, podemos utilizar el patrón Adapter mediante la implementación de una clase adaptadora que herede de la clase o librería que queremos adaptar y sobrescriba los métodos necesarios para adaptarlos a nuestras necesidades. A continuación, un ejemplo de cómo se podría implementar un Adapter en Kotlin:

// Clase original que queremos adaptar
class OriginalClass {
    fun originalMethod() {
        // Código de la función original
    }
}

// Adapter que sobrescribe la función original para adaptarla a nuestras necesidades
class Adapter : OriginalClass() {
    override fun originalMethod() {
        // Código adaptado de la función original
    }
}

Ejemplo concreto del patrón adapter

Un ejemplo concreto de utilización del patrón Adapter en Kotlin podría ser el siguiente:

Imaginémonos que tenemos una aplicación que utiliza una librería externa para gestionar la autenticación de usuarios. La librería ofrece una interfaz que permite iniciar sesión, cerrar sesión y obtener información del usuario autenticado. Sin embargo, la información que ofrece la librería no se ajusta exactamente a lo que necesitamos en nuestra aplicación, por lo que decidimos utilizar un Adapter para adaptar la interfaz de la librería a nuestras necesidades.

Para ello, creamos una clase AuthenticationAdapter que herede de la clase de la librería de autenticación y sobrescriba el método que nos devuelve la información del usuario autenticado. La clase AuthenticationAdapter podría quedar de la siguiente manera:

// Clase de la librería de autenticación
class AuthenticationLibrary {
    fun login() {
        // Código para iniciar sesión
    }

    fun logout() {
        // Código para cerrar sesión
    }

    fun getUserInformation(): String {
        // Devuelve un string con la información del usuario autenticado
    }
}

// Adapter que adapta la interfaz de la librería de autenticación a nuestras necesidades
class AuthenticationAdapter : AuthenticationLibrary() {
    override fun getUserInformation(): User {
        // Devuelve un objeto Usuario con la información del usuario autenticado
        val userInformation = super.getUserInformation()
        val data = userInformation.split(",")
        return User(data[0], data[1], data[2])
    }
}

De esta manera, podemos utilizar la clase AuthenticationAdapter en nuestra aplicación en lugar de la clase AuthenticationLibrary y aprovechar su funcionalidad, pero adaptada a nuestras necesidades.

Además, el código que utiliza la clase AuthenticationAdapter no necesita conocer los detalles de cómo se ha adaptado la función getUserInformation(), lo que permite una mayor reutilización del código.

En resumen, el patrón de diseño Adapter es una técnica muy útil en el desarrollo de software que permite adaptar una interfaz a otra que se espera utilizar, lo que facilita la interoperabilidad entre clases y librerías que no son compatibles entre sí.

En Kotlin, se puede implementar mediante la creación de una clase adaptadora que herede de la clase a adaptar y sobrescriba los métodos necesarios para adaptarlos a nuestras necesidades.