Considere duas classes Dog
e Cat
ambas em conformidade com o Animal
protocolo (em termos da linguagem de programação Swift. Essa seria a interface em Java / C #).
Temos uma tela exibindo uma lista mista de cães e gatos. Há Interactor
classe que lida com a lógica nos bastidores.
Agora, queremos apresentar um alerta de confirmação ao usuário quando ele desejar excluir um gato. No entanto, os cães precisam ser excluídos imediatamente, sem nenhum alerta. O método com condicionais ficaria assim:
func tryToDeleteModel(model: Animal) {
if let model = model as? Cat {
tellSceneToShowConfirmationAlert()
} else if let model = model as? Dog {
deleteModel(model: model)
}
}
Como esse código pode ser refatorado? Obviamente cheira
Dog
eCat
são descritas como classes, enquanto queAnimal
é um protocolo que é implementado por cada uma dessas classes. Portanto, há um pouco de incompatibilidade entre a pergunta e sua resposta.