Если сравнение по типу — плохой дизайн, что мне делать в этой ситуации? (Полиморфизм)

У меня есть задание, в котором я должен написать диаграмму классов UML для игры Donkey Kong Original.

В игре есть небольшие ролики, где манипулируют определенными сущностями (подклассами сущностей). Поэтому я сделал класс катсцены, чтобы справиться с этим. Моя проблема в том, что я не хочу включать все мои подклассы сущностей в Cutscene, потому что это кажется мне ненужным (это также сделает мою диаграмму UML грязной: p). Лучше просто включите в мою кат-сцену класс Entity, а затем передайте мои дочерние объекты в качестве врагов, чтобы проверить, с какой сущностью я имею дело, чтобы я мог соответствующим образом ими манипулировать. (Кажется чище?).

Однако я читаю здесь: http://www.cplusplus.com/forum/general/21246/ что это плохой дизайн — использовать полиморфизм таким образом. Я, кажется, использую его для другой цели.

Если бы кто-нибудь мог сказать мне, если я дурак и что я должен делать, это было бы очень признательно!

Диаграмма URL

0

Решение

Если вы хотите проверить тип экземпляра 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.
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]