Судя по вашему описанию, вам действительно нужны классы для самих очередей, а не только для элементов в очереди.Таким образом, методы и операции, связанные с очередью, переходят в класс очереди, а вещи, относящиеся только к зданиям или объектам, входят в эти классы.
Класс очереди будет включать только методы добавления, удаления и, возможно, переупорядочение его элементов, которые вряд ли потребуют разных реализаций для разных типов объектов.Лучше, чтобы у этих методов не было никаких побочных эффектов, кроме добавления или удаления из очереди - если вам нужно, чтобы что-то произошло после удаления объекта, например, это может сделать вызывающая сторона Queue # remove.Если вам нужно, чтобы сами очереди вели себя по-разному в зависимости от того, содержат ли они здания или объекты, вам понадобятся BuildingQueue и UnitQueue, которые могут наследовать свои общие методы от базового класса Queue или включенного модуля Queue.
Другие вещи, относящиеся к зданиям и юнитам (например, имеют ли они уровень или каковы их специфические характеристики), попадают в классы зданий и юнитов.Им не нужно ничего знать о том, как ведет себя очередь.