Considere dos clases Dogy Catambas conforme al Animalprotocolo (en términos del lenguaje de programación Swift. Esa sería la interfaz en Java / C #).
Tenemos una pantalla que muestra una lista mixta de perros y gatos. Hay una Interactorclase que maneja la lógica detrás de escena.
Ahora queremos presentar una alerta de confirmación al usuario cuando quiera eliminar un gato. Sin embargo, los perros deben eliminarse inmediatamente sin ninguna alerta. El método con condicionales se vería así:
func tryToDeleteModel(model: Animal) {
if let model = model as? Cat {
tellSceneToShowConfirmationAlert()
} else if let model = model as? Dog {
deleteModel(model: model)
}
}
¿Cómo se puede refactorizar este código? Obviamente huele
Dog, yCatse describen como clases, mientras queAnimales un protocolo que se implementa por cada una de esas clases. Así que hay un poco de desajuste entre la pregunta y su respuesta.