Рассмотрим два класса 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
как это протокол, который реализуется каждым из этих классов. Так что между вопросом и вашим ответом есть небольшое несоответствие.