เมื่อคุณใช้แนวคิดของความหลากหลายที่คุณสร้างลำดับชั้นของชั้นเรียนและใช้การอ้างอิงผู้ปกครองที่คุณเรียกใช้ฟังก์ชั่นอินเทอร์เฟซโดยไม่ทราบว่าชนิดที่เฉพาะเจาะจงมีวัตถุ มันเยี่ยมมาก ตัวอย่าง:
คุณมีคอลเลคชั่นสัตว์และเรียกร้องให้สัตว์ทุกตัวทำงานeatและคุณไม่สนใจว่ามันจะกินสุนัขหรือแมว แต่ในลำดับชั้นเดียวกับที่คุณมีสัตว์ที่มีเพิ่มเติม - อื่น ๆ กว่าสืบทอดและดำเนินการจากชั้นเรียนAnimalเช่นmakeEggs, getBackFromTheFreezedStateและอื่น ๆ ดังนั้นในบางกรณีในการทำงานของคุณคุณอาจต้องการทราบประเภทเฉพาะเพื่อเรียกใช้พฤติกรรมเพิ่มเติม
ยกตัวอย่างเช่นในกรณีที่มันเป็นช่วงเวลาเช้าและถ้ามันเป็นเพียงสัตว์แล้วคุณเรียกeatมิฉะนั้นถ้ามันเป็นมนุษย์แล้วโทรครั้งแรกwashHands, และเพียงแล้วโทรgetDressed eatวิธีจัดการกรณีนี้? ความแตกต่างตาย คุณจำเป็นต้องค้นหาประเภทของวัตถุซึ่งฟังดูมีกลิ่นรหัส มีวิธีการทั่วไปในการจัดการกรณีนี้หรือไม่?
Eaterอินเทอร์เฟซด้วยeat()วิธีการในฐานะลูกค้าคุณไม่สนใจว่าการHumanติดตั้งจะต้องมีการโทรครั้งแรกwashHands()และgetDressed()เป็นรายละเอียดการใช้งานของคลาสนี้ หากในฐานะลูกค้าคุณให้ความสำคัญกับความจริงข้อนี้คุณอาจไม่ได้ใช้เครื่องมือที่ถูกต้องสำหรับงาน
getDressedก่อนeatไม่ใช่อาหารกลางวัน ขึ้นอยู่กับสถานการณ์ของคุณwashHands();if !dressed then getDressed();[code to actually eat]อาจเป็นวิธีที่ดีที่สุดในการดำเนินการนี้สำหรับมนุษย์ ความเป็นไปได้อีกอย่างคือจะเกิดอะไรขึ้นถ้าสิ่งอื่น ๆ ต้องการwashHandsและ / หรือgetDressedถูกเรียก? สมมติว่าคุณมีleaveForWork? คุณอาจจำเป็นต้องจัดโครงสร้างโฟลว์โปรแกรมของคุณเพื่อให้มันเรียกใช้มานานแล้ว