Rozważ dwie klasy Dog
i Cat
obie zgodne z Animal
protokoł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 Interactor
klasa, 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
Dog
iCat
są opisane jako klasy, podczas gdyAnimal
jest to protokół, który jest realizowany przez każdy z tych klas. Jest więc trochę niezgodności między pytaniem a odpowiedzią.