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