У меня есть базовый класс под названием Enemy и различные подклассы, которые типа Enemy, такие как BigEnemy, LazerEnemy, AvoidingEnemy и т.д.Выбор подкласса без переключателя заявления в Java
У меня есть Formation класс, цель которого заключается в создании специализированные формирования врагов, такие как линия, сетка, пирамида.
Я хотел бы, чтобы формация взяла в качестве параметра какой тип подкласса врага, которого я хочу создать.
Formation f = new Formation("LazerEnemy","triangle", 4); // makes a triangle formation of lazer enmies
Formation f = new Formation("BigEnemy","line", 10); // makes a line of big enemies
В настоящее время я собирался сделать что-то вроде передать строку с именем enemyType (или это может быть просто целым числом и не переключаться заявления), но так как у меня есть так много типов врагов мне было интересно, если там был аккуратнее способ передать тип объекта, который я хочу создать, который не должен использовать оператор switch.
Возможно, это имеет какое-то отношение к Factory и this вопросу, но я не совсем понимаю.
Благодаря
Почему вы не можете передать непосредственно в 'новый LazerEnemy()' или 'новый BigEnemy()', где 'Formation' конструктор принимает' Enemy' как первый параметр? – Tunaki
У вас есть три варианта: 1) использовать условный выключатель для балансировки или if-else, 2) использовать отражение и пройти в классе, например. LazerEnemy.class, 3) имеют разные заводские методы, например. Formation.createBigEnemy («строка», 10); – bhspencer
@Tunaki Итак, вы говорите, передайте объект подкласса в качестве параметра Formation like Formation (новый LazerEnemy(), «пирамида», 4), а затем конструктор Formation сделает что? Мне нужно создать несколько новых типов Enemy. Формирование (Enemy e, string ftype, int number) {}. Мне нужно создать несколько врагов. Должен ли я быть клонирующим? – user3772547