Суть примерно такая:
Для каждого юнита создается объект с базовым классом Unit. Вместо отдельных подклассов Warrior, Archer есть подклассы MeleeUnit, RangedUnit, которые только хранят специфифичные данные, типо strength, agility.
Вся логика находится в объектах с базовым классом Action, который обозначает собой какое либо действие.
У юнита есть цепочка действий actionChain, каждый ход он поочередно выполняет действия из этой цепочки. Сейчас выполнение цепочки прерывается когда какой то action возврщает нам флаг что он выполнился и дальше ничего выполнять не надо. Наследуясь от Action, и описывая логику в executeAction, можно добавлять новые действия.
Для атак есть специальный Action в который передается стратегия поиска цели TargetStrategy и нанесения урона DamageStrategy.
Action-ы взаимодействуют с симуляцией через абстрактный интерфейс Simulation ссылка на который передается в конструкторе.
От Simulation наследуется имплементация интерфейса RealSimulation.