Considere dos clases Dog
y Cat
ambas conforme al Animal
protocolo (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 Interactor
clase 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
, yCat
se describen como clases, mientras queAnimal
es un protocolo que se implementa por cada una de esas clases. Así que hay un poco de desajuste entre la pregunta y su respuesta.