шаблон проектирования, чтобы избежать множественного наследования - PullRequest
1 голос
/ 23 декабря 2019

Представьте, что есть команда для программирования игр, один разработчик фокусируется на данных, поэтому он создает два класса:

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.

Любые другие шаблоны проектирования или методы, позволяющие сделать это другимчем использовать множественное наследование?

Или любые другие языки или терминологии для решения этой проблемы наследования прототипа данных?

PS Я думаю, что этоЭта проблема немного больше, чем простая композиция типов, она включает прототип, наследуемый от другого прототипа, а реализация наследуется от другой реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...