Hãy xem xét hai lớp Dog
và Cat
cả hai đều tuân thủ Animal
giao 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ó Interactor
lớ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
Dog
vàCat
được mô tả là các lớp, trong khi đóAnimal
là 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.