Rozważ dwie klasy Dogi Catobie zgodne z Animalprotokołem (pod względem języka programowania Swift. Byłby to interfejs w Javie / C #).
Mamy ekran wyświetlający mieszaną listę psów i kotów. Istnieje Interactorklasa, która obsługuje logikę za kulisami.
Teraz chcemy przedstawić użytkownikowi powiadomienie o potwierdzeniu, gdy chce usunąć kota. Psy należy jednak natychmiast usunąć bez żadnych powiadomień. Metoda z warunkami warunkowymi wyglądałaby następująco:
func tryToDeleteModel(model: Animal) {
if let model = model as? Cat {
tellSceneToShowConfirmationAlert()
} else if let model = model as? Dog {
deleteModel(model: model)
}
}
Jak można refaktoryzować ten kod? To oczywiście pachnie
DogiCatsą opisane jako klasy, podczas gdyAnimaljest to protokół, który jest realizowany przez każdy z tych klas. Jest więc trochę niezgodności między pytaniem a odpowiedzią.