对于扩展继承的困惑,请大家帮忙
例如,一个很常见的多重继承的实例,如下图:
基本需求是,一个Employee可以是担当多个角色,但每次使用的激活角色只有一个。
这意味着,Employee成员里面有一个Role*的Vector容器,但是有上图可以看出Manager、SalesPerson对Role肯定是扩展继承,它们增加了Role接口没有的新方法。
事实上,当我们使用某个的角色来操作时,免不了要对保存在Employee成员里的Role*进行类型转换(例如可能需要转换为Manager*来进行操作,完成Role*不能完成的任务),这通常就给Role接口的使用带来的很大的麻烦。
然而,在各种面向对象的书籍中都再警示我们慎用继承,首先考虑组合。
但是这种情况如果没有Role接口的话,Employee成员里面要存储它所能担当的角色时,似乎麻烦更大了,尤其是需求变化角色增加的时候。
所以,请问各位大牛,有没有更好的设计方案来解决此类的扩展继承的问题?
[该贴被layzerar于2010-11-10 23:12修改过]