Hãy xem xét hai lớp Dogvà Catcả hai đều tuân thủ Animalgiao thức (về ngôn ngữ lập trình Swift. Đó sẽ là giao diện trong Java / C #).
Chúng tôi có một màn hình hiển thị một danh sách hỗn hợp chó và mèo. Có Interactorlớp xử lý logic đằng sau hậu trường.
Bây giờ chúng tôi muốn đưa ra một cảnh báo xác nhận cho người dùng khi anh ta muốn xóa một con mèo. Tuy nhiên, chó cần phải được xóa ngay lập tức mà không có bất kỳ cảnh báo. Phương thức với các điều kiện sẽ trông như thế này:
func tryToDeleteModel(model: Animal) {
    if let model = model as? Cat {
        tellSceneToShowConfirmationAlert()
    } else if let model = model as? Dog {
        deleteModel(model: model)
    }
}
Làm thế nào mã này có thể được tái cấu trúc? Nó rõ ràng có mùi
DogvàCatđược mô tả là các lớp, trong khi đóAnimallà một giao thức được thực hiện bởi mỗi lớp đó. Vì vậy, có một chút không phù hợp giữa câu hỏi và câu trả lời của bạn.