У меня есть задание, в котором я должен написать диаграмму классов UML для игры Donkey Kong Original.
В игре есть небольшие ролики, где манипулируют определенными сущностями (подклассами сущностей). Поэтому я сделал класс катсцены, чтобы справиться с этим. Моя проблема в том, что я не хочу включать все мои подклассы сущностей в Cutscene, потому что это кажется мне ненужным (это также сделает мою диаграмму UML грязной: p). Лучше просто включите в мою кат-сцену класс Entity, а затем передайте мои дочерние объекты в качестве врагов, чтобы проверить, с какой сущностью я имею дело, чтобы я мог соответствующим образом ими манипулировать. (Кажется чище?).
Однако я читаю здесь: http://www.cplusplus.com/forum/general/21246/ что это плохой дизайн — использовать полиморфизм таким образом. Я, кажется, использую его для другой цели.
Если бы кто-нибудь мог сказать мне, если я дурак и что я должен делать, это было бы очень признательно!
Если вы хотите проверить тип экземпляра Entity, взгляните на шаблон «Visitor», который является решением для двойной диспетчеризации в C ++.
class EntityVisitor {
virtual void Visit(const Ladder& ladder) = 0;
virtual void Visit(const Mario& mario) = 0;
...
};
Ваша «сущность» будет иметь чисто виртуальную функцию, которая принимает «посетителя».
virtual Accept(EntityVisitor& visitor) = 0;
И каждый подкласс реализует этот метод, передавая * это функции посетителей ‘Посетить’.
void Mario::Accept(EntityVisitor& v) {
v.Visit(*this); // Calls the 'Mario' overload.
}
Других решений пока нет …