ฉันมีรหัสบางส่วนที่โมเดลการสืบทอดที่ดีลงไปและฉันพยายามเข้าใจว่าทำไมและวิธีการแก้ไข โดยพื้นฐานแล้วจินตนาการว่าคุณมีลำดับชั้นของ Zoo ด้วย:
class Animal
class Parrot : Animal
class Elephant : Animal
class Cow : Animal
เป็นต้น
คุณมีวิธีกิน (), รัน (), ฯลฯ และทุกอย่างดี วันหนึ่งมีคนเข้ามาและพูดว่า - คลาส CageBuilder ของเราทำงานได้ดีและใช้ animal.weight () และ animal.height () ยกเว้น African Bison ใหม่ที่แข็งแรงเกินไปและสามารถทุบกำแพงได้ดังนั้นฉันจะเพิ่ม อีกคุณสมบัติหนึ่งของคลาส Animal - isAfricanBizon () และใช้สิ่งนั้นเมื่อเลือกวัสดุและแทนที่มันสำหรับคลาส AfricanBizon เท่านั้น บุคคลต่อไปมาและทำสิ่งที่คล้ายกันและสิ่งต่อไปที่คุณรู้ว่าคุณมีคุณสมบัติเหล่านี้ทั้งหมดสำหรับชุดย่อยของลำดับชั้นในคลาสพื้นฐาน
เป็นวิธีที่ดีในการปรับปรุง / refactor รหัสดังกล่าวคืออะไร อีกทางเลือกหนึ่งที่นี่คือเพียงแค่ใช้ dynamic_casts เพื่อตรวจสอบประเภท แต่ที่ clutters ผู้โทรและเพิ่มพวงของ if-then-else ทั่วทุกสถานที่ คุณสามารถมีอินเทอร์เฟซเฉพาะเพิ่มเติมได้ที่นี่ แต่ถ้าคุณมีการอ้างอิงคลาสพื้นฐานที่ไม่ได้ช่วยอะไรมาก ข้อเสนอแนะอื่น ๆ ? ตัวอย่าง?
ขอบคุณ!