Как правильно спроектировать «космический корабль»? Здравствуйте, это снова я. Есть космический корабль. Класс Ship. В нем лежит массив отсеков корабля. Класс Hardpoint. В каждом отсеке может быть установлено оборудование. Там такая схема - IEquipment - базовый абстрактный класс, определяет общие параметры вроде массы, размеров и т.д. Наследники IEquipment - типы оборудования, Generator, Engine и т.д. Ну и их экземпляры, лежащие в отсеках - конкретные модели этого оборудования.
Проблема в их действии. Простой пример - двигатель определяет скорость корабля (физика, прости). Соответственно чтобы внешние скрипты (движения в данном случае) узнавали скорость корабля пришлось разместить свойство Speed в главном классе (Ship), которое проходит по всем двигателям на корабле и считывает результирующую скорость с них. Проблема в том, что по ходу разработки добавляется множество новых свойств и все это висит в Ship. Это нормально или это плохая архитектура и нормальные люди делают все по другому? В общем, прошу гуру проанализировать это и вынести вердикт.

21 Авг 2019 в 07:07
218 +1
1
Ответы
1

По-моему, в вашем случае можно применить паттерн проектирования "Посетитель". Этот паттерн позволяет добавить новые операции к классам объектов, не изменяя их самодийный код.

Вы можете создать интерфейс Visitor с методами для обработки каждого типа оборудования. Затем создайте классы-посетители, реализующие этот интерфейс и содержащие логику для работы с конкретными типами оборудования.

Далее вам нужно добавить метод accept(Visitor visitor) в классы оборудования, чтобы они могли передать себя посетителю для обработки.

Таким образом, каждый раз, когда вам нужно обработать все типы оборудования на корабле, вы просто создаете нового посетителя и передаете его в метод accept каждого оборудования. Это позволит избежать загромождения класса Ship новыми методами и свойствами и сделает вашу архитектуру более гибкой и расширяемой.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир