避免多重继承的设计模式

时间:2019-12-23 09:26:41

标签: c++ multiple-inheritance virtual-inheritance

想象有一个游戏编程团队,一个设计师专注于数据,所以他创建了两个类:

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。我认为这个问题不仅仅是简单的类型组合,它涉及一个从另一个原型继承的原型,以及一个从另一个实现继承的实现。

0 个答案:

没有答案