Métodos de pago
Supongamos que estás trabajando para una tienda cuyos métodos de pago actuales son, efectivo y tarjeta débito, pero espera que para el próximo año tenga convenios que le permitan utilizar otros medios de pago como son las tarjetas de crédito, Paypal y Nequi. Dada la situación podemos prever una solución simple que es, crear una clase Pago con un método que contenga un condicional if-else o switch-case donde a partir del tipo de medio de pago, realice cierta acción.

Esta clase aunque cumple su función, presenta una alta dificultad para su mantenibilidad, ya que al querer cambiar o agregar un nuevo medio de pago se deberá alterar el método procesarPago, esto rompe el principio de abierto-cerrado, ya que el código existente debe ser alterado, de igual manera aumentaría su complejidad ya que el método crece en responsabilidades.
La otra solución es ver un punto de variación en los requisitos del cliente por lo cual crearemos una interfaz estable que facilite la adición de los bancos futuros.

Esto nos permite protegernos contras las variaciones ya que a futuro al querer agregar nuevos medios de pago, simplemente debemos crear una nueva implementación del método procesarPago sin necesidad de modificar las clases existentes.