Separated Interface se refiere a la práctica de definir la interfaz de un componente en un paquete o módulo separado de su implementación.
No es más que la aplicación del principio SOLID “D”, Dependency Inversion Principle (Inversión de la Dependencia).
Esto permite que múltiples implementaciones de la misma interfaz coexistan sin que el consumidor de la interfaz necesite saber detalles específicos sobre cuál implementación está siendo utilizada.
El consumidor y el proveedor de la interfaz están desacoplados, lo que facilita el intercambio de implementaciones sin afectar el código que depende de la interfaz.
Este patrón es especialmente útil en situaciones donde:
Tenemos una aplicación que necesita enviar notificaciones, pero el método de envío de notificaciones puede variar (correo electrónico, SMS, etc.).
Definimos la interfaz en su propio módulo o paquete:
public interface Notificador {
void enviarMensaje(String mensaje);
}
Creamos una implementación de esta interfaz:
public class NotificadorEmail implements Notificador {
public void enviarMensaje(String mensaje) {
// Lógica para enviar notificaciones por correo electrónico
}
}
public class NotificadorSMS implements Notificador {
public void enviarMensaje(String mensaje) {
// Lógica para enviar notificaciones por SMS
}
}
El patrón Separated Interface promueve un diseño de software flexible y desacoplado mediante la inversión de dependencias, permitiendo que los sistemas se construyan de manera modular, donde las partes pueden ser desarrolladas, probadas y modificadas de forma independiente.
Este patrón permite que diferentes componentes de software colaboren de manera efectiva sin estar fuertemente acoplados a las implementaciones específicas de los demás.