考虑下面的示例。对ColorChoice枚举的任何更改都会影响所有IWindowColor子类。
枚举会导致界面脆弱吗?是否有比枚举更好的东西可以提供更多的多态灵活性?
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子类的句柄。现在,我有了一个将来无法扩展为允许的字符类型为{human,dwarf}的其他应用程序的API。
编辑:只是为了更具体地说明我在做什么。我正在设计此(MusicXML)规范的强绑定,并且使用枚举类来表示规范中使用xs:enumeration声明的那些类型。我正在考虑下一个版本(4.0)出现时会发生什么。我的类库可以在3.0模式和4.0模式下工作吗?如果下一个版本是100%向后兼容的,那么也许是。但是,如果从规范中删除了枚举值,那么我就死定了。