ลองพิจารณาตัวอย่างด้านล่าง การเปลี่ยนแปลงใด ๆ กับ ColorChoice enum จะส่งผลกระทบต่อคลาสย่อย IWindowColor ทั้งหมด
enums มีแนวโน้มที่จะทำให้เกิดการเชื่อมต่อที่เปราะหรือไม่? มีอะไรดีไปกว่า Enum ที่จะยอมให้มีความยืดหยุ่นแบบ polymorphic มากขึ้นหรือไม่?
enum class ColorChoice
{
Blue = 0,
Red = 1
};
class IWindowColor
{
public:
ColorChoice getColor() const=0;
void setColor( const ColorChoice value )=0;
};
แก้ไข: ขออภัยที่ใช้สีเป็นตัวอย่างของฉันนั่นไม่ใช่สิ่งที่เป็นคำถาม นี่คือตัวอย่างอื่นที่หลีกเลี่ยงปลาเฮอริ่งแดงและให้ข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่ฉันหมายถึงโดยความยืดหยุ่น
enum class CharacterType
{
orc = 0,
elf = 1
};
class ISomethingThatNeedsToKnowWhatTypeOfCharacter
{
public:
CharacterType getCharacterType() const;
void setCharacterType( const CharacterType value );
};
นอกจากนี้ให้จินตนาการว่าจัดการกับ ISomethingThatNeedsToKnowWhatTypeOfCharacter ที่เหมาะสมได้รับการเสนอในรูปแบบการออกแบบจากโรงงาน ตอนนี้ฉันมี API ที่ไม่สามารถขยายได้ในอนาคตสำหรับแอปพลิเคชันอื่นซึ่งประเภทอักขระที่อนุญาตคือ {human, dwarf}
แก้ไข: เพื่อเป็นรูปธรรมมากขึ้นเกี่ยวกับสิ่งที่ฉันกำลังทำงานอยู่ ฉันกำลังออกแบบการเชื่อมโยงข้อมูลจำเพาะ( MusicXML ) ที่รัดกุมและฉันใช้คลาส enum เพื่อแสดงชนิดเหล่านั้นในข้อมูลจำเพาะที่ประกาศด้วย xs: การแจงนับ ฉันพยายามคิดว่าจะเกิดอะไรขึ้นเมื่อเวอร์ชั่นถัดไป (4.0) ออกมา ไลบรารีคลาสของฉันสามารถทำงานในโหมด 3.0 และโหมด 4.0 ได้หรือไม่ หากรุ่นถัดไปรองรับ 100% แบบย้อนหลังอาจเป็นไปได้ แต่ถ้าค่าการแจงนับถูกลบออกจากข้อกำหนดแล้วฉันตายในน้ำ