想象有一个游戏编程团队,一个设计师专注于数据,所以他创建了两个类:
class EnemyProperties {
public:
int health;
};
class OrcProperties : public EnemyProperties {
public:
int strength;
};
另一个程序员专注于行为,作为类Enemy
,他创建了一个实现:
class EnemyImpl : public EnemyProperties {
public:
void run() {}
};
但是在实现Orc
时,他写道:
class OrcImpl : public OrcProperties, public EnemyImpl {
public:
void attack() {}
};
他感觉到,如果有更多这样的原型,钻石继承会发生可能,所以他必须做出所有继承virtual
。
尽管虚拟继承解决了这个问题,但我感觉这是一个设计模式问题,而不是钻石继承问题,简单地说: OrcImpl
应该继承自EnemyProperties
的实现,并定义属于Orc
的行为。
除了使用多重继承以外,还有其他设计模式或技术可以做到这一点吗?
或其他任何语言或术语来处理此数据原型继承问题?
P.S。我认为这个问题不仅仅是简单的类型组合,它涉及一个从另一个原型继承的原型,以及一个从另一个实现继承的实现。