Розглянемо два класи Dog
і Cat
обидва, що відповідають Animal
протоколу (з точки зору мови програмування Swift. Це буде інтерфейс у Java / C #).
У нас є екран із змішаним списком собак та котів. Є Interactor
клас, який керується логікою за кадром.
Тепер ми хочемо подати користувачеві попередження про підтвердження, коли він хоче видалити кішку. Однак собак потрібно негайно видалити без будь-яких попереджень. Метод із умовними умовами виглядатиме так:
func tryToDeleteModel(model: Animal) {
if let model = model as? Cat {
tellSceneToShowConfirmationAlert()
} else if let model = model as? Dog {
deleteModel(model: model)
}
}
Як можна змінити цей код? Воно очевидно пахне
Dog
іCat
описується як класи, в той час якAnimal
це протокол , який реалізується кожен з цих класів. Так що між питанням і вашою відповіддю є дещо невідповідність.