พิจารณาสองคลาส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)
}
}
รหัสนี้จะถูก refactored ได้อย่างไร? เห็นได้ชัดว่ามันมีกลิ่น
Dog
และCat
ถูกอธิบายว่าเป็นคลาสขณะที่Animal
โปรโตคอลนั้นถูกใช้งานโดยแต่ละคลาสเหล่านั้น ดังนั้นจึงมีความไม่ตรงกันระหว่างคำถามและคำตอบของคุณ